问题描述
我已经编写了一个测试应用程序来修改数百个XML,基本上我修改了几个节点,然后再次保存XML。
输入的XML文件是UTF-8-BOM,但是输出的是UTF-8(在Notepad ++中查看)。
代码在VB.NET 4.7.2的控制台应用程序上运行,这是我的基本代码:
Dim myXML As XmlDocument = New XmlDocument
Dim nodelist As XmlNodeList
Dim node As XmlNode
myXML.Load(file)
nodelist = myXML.SelectNodes("//root/row")
For Each node In nodelist
'All my code goes here
Next
myXML.Save(file)
我尝试过类似的事情:
myXML.CreateXmlDeclaration("1.0","UTF-16","")
但这没用。我一直在搜索,似乎每个人都有确切的相反的问题,并检查了MSDOC,我看不到任何指定BOM的引用:
https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmldeclaration.encoding?view=netframework-4.7
问题在于,当文件导入到没有BOM的数据库中时,某些字符显示损坏,因此我确实需要相同的编码。
大量阅读后,我可以尝试使用StreamWriter
而不是XMLDocument
重写我的应用程序,但是如果有解决方法,我会更喜欢它:)。谢谢!
解决方法
根据@JosefZ的建议,我使用了以下策略:
Using writer = New XmlTextWriter(file,New UTF8Encoding(True))
Dim xmlsettings As XmlWriterSettings = New XmlWriterSettings
xmlsettings.OmitXmlDeclaration = False
xmlsettings.ConformanceLevel = ConformanceLevel.Fragment
xmlsettings = writer.Settings
myXML.Save(writer)
End Using