DTD文件abc.dtd :::
<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
&#13;
XML文件xyz.xml :::::
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "D:\abc.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
&#13;
C#code :::
var messages = new StringBuilder();
var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD };
settings.DtdProcessing = DtdProcessing.Parse;
settings.ValidationEventHandler += (sender1, args) => messages.AppendLine(args.Message);
FileStream fs = new FileStream(@"D:\xyz.xml", FileMode.Open);
XmlReader reader = XmlReader.Create(fs, settings);
// Parse the file.
while (reader.Read()) ;
if (messages.Length > 0)
{
// Log Validation Errors
// Throw Exception
// Etc.
}
这里就行了 while(reader.Read()); 给出错误 未找到预期的DTD标记。第1行,第3位
如果我复制xml文件中的dtd语句,则不会出现此错误。 但我需要将它们分开并验证。