如果没有DTD,XML DocumentType方法CreateDocumentType崩溃.NET C#

Nic*_*ick 4 c# xml doctype xmldocument dtd

我在生成需要自动生成的XML然后手动上载到客户端站点以进行验证时遇到问题.

客户的规范要求我们在顶部包含DTD声明.那是

<!DOCTYPE TheFile System "TheDTD.dtd" ""> 
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试生成XML行时,以编程方式

    XmlDocumentType doctype;
    doctype = doc.CreateDocumentType("TheFile", null, "TheDTD.dtd", null);
    doc.AppendChild(doctype);
Run Code Online (Sandbox Code Playgroud)

失败并且它问我"TheDTD.dtd"应该存在于windows目录中:C:\ Windows\System32\inetsrv

后来如果我想读取XmlDoc那一行

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlLocation);
Run Code Online (Sandbox Code Playgroud)

失败并且它询问我"TheDTD.dtd"应该存在于存储整个项目的Project目录中

我不想实际验证DTD,我只是想引用,因为验证发生在客户端.有没有办法在XML中添加行""而不必在两个不同的位置复制实际的.dtd?

如果我们公开声明并将其更改为

 <!DOCTYPE TheFile PUBLIC "TheDTD.dtd" ""> 
Run Code Online (Sandbox Code Playgroud)

然后一切正常,但客户要求它应该是SYSTEM而不是PUBLIC.我希望如果实际的.dtd丢失,CreateDocumentType和Load方法不会崩溃,因为此时我甚至没有这个文件而且我的目的不需要它.

谢谢

小智 8

您可以将XmlDocument.XmlResolver属性设置为null.这会禁用外部XML资源(dtd,schemas)的加载.

doc.XmlResolver= null;
Run Code Online (Sandbox Code Playgroud)