每次我打电话给方法
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)
有谁知道为什么会这样?我显然不希望这种情况发生.
<!DOCTYPE rootname SYSTEM url [DTD]>
Run Code Online (Sandbox Code Playgroud)
凡DTD包含任何内部子集的声明到您的文档.
XmlDocument(使用)使用的底层读取器XmlTextReader不区分具有空内部子集的文档和未指定内部子集的文档,因此InternalSubset == ""对于这两种情况都会返回。
然后,当XmlDocument.Save()调用时,它会看到一个空字符串InternalSubset并忠实地写入一个空的内部子集:[]。
不幸的是,XmlDocument.DocumentType.InternalSubset它是只读的,所以你不能将它设置为空。你可以这样做:
使用较低的级别XmlTextWriter.WriteDocType()可以进行更多的控制。
使用XDocument,在那里可以设置XDocument.DocumentType.InternalSubset = null。