【问题标题】:XmlDocument.Load not processing DTD?XmlDocument.Load 不处理 DTD?
【发布时间】:2013-09-27 18:27:13
【问题描述】:

我正在尝试构建和开发安全 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 时。实体扩展/替换没有发生。

为什么不呢?

【问题讨论】:

  • 您的标题显示为 XDocument,但您在代码中使用了 XmlDocument。您要问的是 XmlDocument 吗?
  • @Alireza - 不完全一样,那里的答案也不是特别有用。我想在这里明确知道这段代码有什么问题。
  • @Vcsjones - 是的,我要问的是 XmlDocument。

标签: c# xml dtd


【解决方案1】:

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

此方法不执行 DTD 或架构验证。如果你想 要进行验证,请使用 Load 方法并将其传递给 XmlValidatingReader。有关加载时间的示例,请参见 XmlDocument 验证

The articlethis one 和许多其他提供 DTD 验证的代码示例。

【讨论】:

    猜你喜欢
    • 2018-01-21
    • 2012-10-20
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多