c# - 如果缺少 DTD,XML DocumentType 方法 CreateDocumentType 会崩溃 .NET C#

标签 c# xml doctype dtd xmldocument

我在生成需要自动生成然后手动上传到客户端站点以进行验证的 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/

相关文章:

JavaScript Xml 计数

html - 如何设置 XMLDOMDocument 的文档类型?

html - &lt;!DOCTYPE html> 缩小了我网站的内容

c# - pdb 文件出现在网站发布文件夹中

c# - 将结构值作为接口(interface)值传递时如何避免装箱?

c# - 在工作组的情况下,如何在远程计算机上授予 Windows 服务访问权限?

c# - 使用 CsvHelper 仅将选定的列写入 CSV 文件

xml - 在 SQL 中搜索 XML 列

sql-server - 无法在 SQL Server 中将 TEXT 转换为 XML

CSS列高不继承