我在生成需要自动生成然后手动上传到客户端站点以进行验证的 XML 时遇到问题。
客户端的规范要求我们在顶部包含 DTD 声明。 也就是
<!DOCTYPE TheFile System "TheDTD.dtd" "">
所以当我尝试生成 XML 行时以编程方式
XmlDocumentType doctype;
doctype = doc.CreateDocumentType("TheFile", null, "TheDTD.dtd", null);
doc.AppendChild(doctype);
失败,它询问我“TheDTD.dtd”应该存在于 windows 目录中: C:\Windows\System32\inetsrv
稍后如果我想阅读 XmlDoc 行
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlLocation);
失败,它询问我“TheDTD.dtd”应该存在于存储整个项目的项目目录中
我不想实际验证 DTD,我只是想引用,因为验证发生在客户端。有什么方法可以在 XML 中添加行“”而不必在 2 个不同位置复制实际的 .dtd?
如果我们公开声明并将其更改为
<!DOCTYPE TheFile PUBLIC "TheDTD.dtd" "">
然后一切正常,但客户端要求它应该是 SYSTEM 而不是 PUBLIC。 如果缺少实际的 .dtd,我希望 CreateDocumentType 和 Load 方法不会崩溃,因为此时我什至没有这个文件,我的目的不需要它。
谢谢
最佳答案
您可以将 XmlDocument.XmlResolver 属性设置为 null。这会禁用外部 XML 资源(dtd、模式)的加载。
doc.XmlResolver= null;
关于c# - 如果缺少 DTD,XML DocumentType 方法 CreateDocumentType 会崩溃 .NET C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11135343/