每次我在
上调用方法XmlDocument.Save(fooFilepath);
它在DOCTYPE标记的末尾插入两个方括号,例如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ARCXML SYSTEM "G:\ArcIMS\DTD\arcxml.dtd"[]>
有谁知道为什么会这样?我显然不希望这种情况发生。
答案 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。你可以这样做:
使用较低级别XmlTextWriter.WriteDocType()
可以获得更多控制权。
使用XDocument
,您可以在其中设置XDocument.DocumentType.InternalSubset = null
。