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

问题描述

|| 每次我调用方法
XmlDocument.Save(fooFilepath);
它将两个方括号插入DOCTYPE标签的末尾,例如
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE ARCXML SYstem \"G:\\Arcims\\DTD\\arcxml.dtd\"[]>
有谁知道为什么会这样?我显然不希望这种情况发生。     

解决方法

        那是DOCTYPE声明的普通(和可选)部分。
<!DOCTYPE rootname SYSTEM url [DTD]>
其中DTD包含文档的任何内部子集声明。     ,        
XmlDocument
(使用
XmlTextReader
)使用的基础阅读器无法区分内部子集为空的文档和未指定内部子集的文档,因此在两种情况下都将返回
InternalSubset == \"\"
。 然后,当调用
XmlDocument.Save()
时,它将看到
InternalSubset
的空字符串,并忠实地写入一个空的内部子集::8ѭ。 不幸的是,ѭ9是只读的,因此您不能将其设置为null。您可以执行以下任一操作: 使用较低级别的
XmlTextWriter.WriteDocType()
进行更多控制。 使用
XDocument
,您可以在其中设定
XDocument.DocumentType.InternalSubset = null
。