Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlDocument.Load是否不处理DTD?_C#_Xml_Dtd - Fatal编程技术网

C# XmlDocument.Load是否不处理DTD?

C# XmlDocument.Load是否不处理DTD?,c#,xml,dtd,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 =

我正在尝试构建和开发一个安全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");
String str=“]>&word;”;
System.Xml.XmlDocument xDoc=new System.Xml.XmlDocument();
LoadXml(str);
保存(@“C:\Temp\xDoc.xml”);
假设xml字符串包含一个DTD实体词,它在我的实际xml中被引用。加载文档时,我希望DTD得到处理,因此用字符串“A”替换xml中提到的实体“word”。然后将整个文档写回磁盘。但是,当我检查xDoc.xml时。实体扩展/替换尚未发生


为什么不呢

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

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


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

您的标题是XDocument,但您在代码中使用的是XmlDocument。你问的是XmlDocument吗?可能是@Alireza的副本-不完全相同,那里的答案也不是特别有用。我想在这里明确说明这段代码的问题所在。@Vcsjones-是的,我问的是XmlDocument。