我使用.NET XmlReader打开XML文件并将文件保存在另一个文件名中,似乎DOCTYPE声明在两个文件之间发生了变化.虽然新保存的文件仍然是有效的XML,但我想知道它为什么坚持要更改原始标记.
Dim oXmlSettings As Xml.XmlReaderSettings = New Xml.XmlReaderSettings() oXmlSettings.XmlResolver = Nothing oXmlSettings.CheckCharacters = False oXmlSettings.ProhibitDtd = False oXmlSettings.IgnoreWhitespace = True Dim oXmlDoc As XmlReader = XmlReader.Create(pathToOriginalXml, oXmlSettings) Dim oDoc As XmlDocument = New XmlDocument() oDoc.Load(oXmlDoc) oDoc.Save(pathToNewXml)
以下(原始文件中):
成为(注意结尾处的[]字符):
Maurice Flan.. 8
设置XmlDocument.XmlResolver = null时,System.Xml中存在错误.解决方法是创建自定义XmlTextWriter:
private class NullSubsetXmlTextWriter : XmlTextWriter { public NullSubsetXmlTextWriter(String inputFileName, Encoding encoding) : base(inputFileName, encoding) { } public override void WriteDocType(string name, string pubid, string sysid, string subset) { if (subset == String.Empty) { subset = null; } base.WriteDocType(name, pubid, sysid, subset); } }
在您的代码中,创建一个新的NullSubsetXmlTextWriter(pathToNewXml,Encoding.UTF8)并将该对象传递给oDoc.Save()方法.
以下是Microsoft支持案例,您可以在其中阅读有关解决方法的内容(它描述了解决方法但未提供代码).
设置XmlDocument.XmlResolver = null时,System.Xml中存在错误.解决方法是创建自定义XmlTextWriter:
private class NullSubsetXmlTextWriter : XmlTextWriter { public NullSubsetXmlTextWriter(String inputFileName, Encoding encoding) : base(inputFileName, encoding) { } public override void WriteDocType(string name, string pubid, string sysid, string subset) { if (subset == String.Empty) { subset = null; } base.WriteDocType(name, pubid, sysid, subset); } }
在您的代码中,创建一个新的NullSubsetXmlTextWriter(pathToNewXml,Encoding.UTF8)并将该对象传递给oDoc.Save()方法.
以下是Microsoft支持案例,您可以在其中阅读有关解决方法的内容(它描述了解决方法但未提供代码).