C#中的DTD解析和验证问题

时间:2016-11-10 12:24:46

标签: c# asp.net xml dtd

DTD文件abc.dtd :::



<!DOCTYPE note
[
  
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
&#13;
&#13;
&#13;

XML文件xyz.xml :::::

&#13;
&#13;
<?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;
&#13;
&#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语句,则不会出现此错误。 但我需要将它们分开并验证。

0 个答案:

没有答案