XmlDocument.Save()在doctype声明中插入空方括号

Vid*_*dar 10 c# xml

每次我打电话给方法

XmlDocument.Save(fooFilepath);
Run Code Online (Sandbox Code Playgroud)

它在DOCTYPE标签的末尾插入两个方括号,例如

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ARCXML SYSTEM "G:\ArcIMS\DTD\arcxml.dtd"[]>
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?我显然不希望这种情况发生.

use*_*116 6

这是DOCTYPE声明的正常(和可选)部分.

<!DOCTYPE rootname SYSTEM url [DTD]>
Run Code Online (Sandbox Code Playgroud)

DTD包含任何内部子集的声明到您的文档.

  • 是的,它是有效的 xml 语法,但一些解析器无法处理它。 (3认同)

wis*_*cky 5

XmlDocument(使用)使用的底层读取器XmlTextReader不区分具有空内部子集的文档和未指定内部子集的文档,因此InternalSubset == ""对于这两种情况都会返回。

然后,当XmlDocument.Save()调用时,它会看到一个空字符串InternalSubset并忠实地写入一个空的内部子集:[]

不幸的是,XmlDocument.DocumentType.InternalSubset它是只读的,所以你不能将它设置为空。你可以这样做:

  1. 使用较低的级别XmlTextWriter.WriteDocType()可以进行更多的控制。

  2. 使用XDocument,在那里可以设置XDocument.DocumentType.InternalSubset = null