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

时间:2011-05-31 18:28:16

标签: c# xml

每次我在

上调用方法
XmlDocument.Save(fooFilepath);

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ARCXML SYSTEM "G:\ArcIMS\DTD\arcxml.dtd"[]>

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

2 个答案:

答案 0 :(得分:5)

那是a normal (and optional) part of a DOCTYPE declaration

<!DOCTYPE rootname SYSTEM url [DTD]>

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

答案 1 :(得分:2)

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

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

不幸的是,XmlDocument.DocumentType.InternalSubset是只读的,因此您无法将其设置为null。你可以这样做:

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

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