XmlDocument.Load没有处理DTD?

时间:2013-09-27 18:27:13

标签: c# xml dtd

我正在努力建立&开发一个安全POC,这个代码是一个应用程序的一部分,我已经提取到一个较小的应用程序,因为我有一些困难。

 String str = "<?xml version=\"1.0\"?><!DOCTYPE foo[<!ELEMENT foo ANY> <!ENTITY word \"A\">]><foo>&word;</foo>";
   System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();  
  xDoc.LoadXml(str);
 xDoc.Save(@"C:\Temp\xdoc.xml");

考虑xml字符串包含一个DTD实体字,在我的实际xml中引用。加载文档时,我希望DTD能够被处理,因此用我的xml中引用的实体“word”替换字符串“A”。然后将整个文档写回磁盘。但是当我检查xDoc.xml时。实体扩展/替换尚未发生。

为什么不呢?

1 个答案:

答案 0 :(得分:1)

您可以在代码中使用的LoadXml Load方法中找到以下内容:

  

此方法不执行DTD或Schema验证。如果你想   要进行验证,请使用XmlValidatingReader方法并将其传递给   XmlDocument。有关加载时的示例,请参阅{{1}}   验证

the documentationThe article以及许多其他提供DTD验证的代码示例。