Introducing the XmlPreloadedResolver
The XmlPreloadedResolver is a new type that we’ve been working on in SilverLight that provides the ability to load a DTD without a call to the network. The new type can act as a manually maintainable cache of DTD’s and XML Streams.
Let’s look at two examples of how the XmlPreloadedResolver can be used.
Example 1:
The XmlPreloadedResolver can be used to pre-load an external DTD. In the following example, a user-defined DTD is pre-loaded into the resolver. The resolver is then used when loading the XML file.
String strDtd = "<!ENTITY entity 'Replacement text'>";
String strXml = @"<!DOCTYPE doc SYSTEM 'myDtd.dtd'>
<doc>&entity;</doc>";
System.Xml.Resolvers.XmlPreloadedResolver resolver = new XmlPreloadedResolver();
resolver.Add(resolver.ResolveUri(null, "myDtd.dtd"), strDtd);
XmlReaderSettings rs = new XmlReaderSettings();
rs.XmlResolver = resolver;
rs.DtdProcessing = DtdProcessing.Parse;
XmlReader reader = XmlReader.Create(new StringReader(strXml), rs);
For the complete example, refer to: https://msdn.microsoft.com/en-us/library/cc189063(VS.95).aspx
Example 2:
The XmlPreloadedResolver also contains two well-known DTD sets: XHTML 1.0 and RSS 0.91. These two well known DTD sets can be enabled via the XmlKnownDtd enumeration. The following is an example of using the XmlPreloadedResolver to preload the XHTML 1.0 DTD into an XmlReaderSettings object. In this example, no network calls are needed to parse an XHTML file.
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
settings.XmlResolver =
new XmlPreloadedResolver(XmlKnownDtds.Xhtml10);
XmlReader reader = XmlReader.Create("HTMLPage.html", settings);
XDocument document = XDocument.Load(reader);
For the complete example, refer to: https://msdn.microsoft.com/en-us/library/cc189059(VS.95).aspx
Look for this new class in System.Xml.Resolvers namespace in a new DLL: System.Xml.Utils.dll that will be included as part of the upcoming SilverLight 2.0 SDK.
Shayne Burgess
Program Manager | Data Programmability
- and -
Helena Kotas
Senior Software Development Engineer | Data Programmability
Comments
Anonymous
August 14, 2008
PingBack from http://blog.a-foton.ru/2008/08/introducing-the-xmlpreloadedresolver/Anonymous
August 14, 2008
Is it Silverlight-specific, or will it also appear in the full version of the Framework? Writing all the code to preload local DTDs for XML files is possible there at the moment, but very tedious. Something like this would really help.Anonymous
August 14, 2008
Ditto the comment above, having this in the full framework would be incredibly useful.Anonymous
August 16, 2008
The comment has been removedAnonymous
August 27, 2008
Hey ALLO___XHTML preloadER DTD FOR XML FILES OVER TIME MACHINES AND DRIVES do nothing OR WE'LL BE TALKING like PHYSICAL APPLICATIONS FOR THESES PROCEDURES OR PROCESSES i DO NOT BELIEVE in it and can't BE DONE BECAUSE IT's LIKE ME SAYING APPARENTLY I HAVE SIMOLTANEUS INITIATIVES and yello dog the OKAY user IN A FIGHTING SCENEREO. The thesis for resolving such an issue is nothing + not working.....understand no resolver droped well or be on the matter ecx. think my machine will not come on without a physical application process R.S.V.P;.Anonymous
September 04, 2008
Thanks for the feedback. Currently, the XmlPreloadedResolver is only in the SilverLight 2.0 SDK. We have talked about including it in the next version of the framework but we have not made a decision yet if we will. We will take this feedback into account, however, when we do make the decision. -Shayne