Hey I try to validate my html page with official dtd :
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(MessageBody));
ms.Position = 0;
XmlReaderSettings settingsReader = new XmlReaderSettings();
settingsReader.DtdProcessing = DtdProcessing.Parse;
settingsReader.ValidationType = ValidationType.DTD;
MyUrlResolver resolver = new MyUrlResolver();
settingsReader.XmlResolver = resolver;
XmlReader reader = XmlReader.Create(ms, settingsReader);
while(reader.Read()){}
and custom XmlUrlResolver:
class MyUrlResolver : System.Xml.XmlUrlResolver
{
public MyUrlResolver()
{ }
public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
{
if (File.Exists(System.Web.Hosting.HostingEnvironment.MapPath("~/dtd/xhtml11.dtd")))
{
absoluteUri = new Uri(System.Web.Hosting.HostingEnvironment.MapPath("~/dtd/xhtml11.dtd"));
}
return base.GetEntity(absoluteUri, role, ofObjectToReturn);
}
public override Uri ResolveUri(Uri baseUri, string relativeUri)
{
baseUri = new Uri(System.Web.Hosting.HostingEnvironment.MapPath("~"));
relativeUri = "dtd/xhtml11.dtd";
return base.ResolveUri(baseUri, relativeUri);
}
}
Durning reading xml occurs validation and I get exception:
Parameter entity ‘xhtml-inlstyle.mod’ references itself. Line 111, position 21.
Error occurs here :
<!-- Inline Style Module ........................................ -->
<!ENTITY % xhtml-inlstyle.module "INCLUDE" >
<![%xhtml-inlstyle.module;[
<!ENTITY % xhtml-inlstyle.mod
PUBLIC "-//W3C//ELEMENTS XHTML Inline Style 1.0//EN"
"http://www.w3.org/MarkUp/DTD/xhtml-inlstyle-1.mod" >
%xhtml-inlstyle.mod;]]>
I cannot understand why official dtd is wrong :/ What should I do ?
Solution for me was download xhtml11.dtd and all *.mod files referenced to dtd. Then I in dtd remove http links to
Now dtd during validation html page can use local dtd without download it from www 😉