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

每次我打电话给方法

XmlDocument.Save(fooFilepath); 

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

   

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

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

  

DTD包含文档的任何内部子集声明。

XmlDocument使用的基础读取器(使用XmlTextReader )不区分具有空内部子集的文档和没有指定内部子集的文档,因此它将为两种情况返回InternalSubset == ""

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

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

  1. 使用较低级别的XmlTextWriter.WriteDocType()来获得更多控制权。

  2. 使用XDocument ,您可以在其中设置XDocument.DocumentType.InternalSubset = null