原始xml文件使用UTF-8 without BOM
<?xml version="1.0" encoding="UTF-8"?>
<some_text>
<ada/>
<file/>
<title><![CDATA[]]></title>
<code/>
<parathrhseis/>
</some_text>
我尝试在此功能中将文字设置为title
:
Dim myXmlDocument As XmlDocument = New XmlDocument()
Dim node As XmlNode
Dim s As String
s = "name.xml"
If System.IO.File.Exists(s) = False Then
Return False
End If
myXmlDocument.Load(s)
node = myXmlDocument.DocumentElement
Try
For Each node In node.ChildNodes
If node.Name = "title" Then
node.FirstChild.InnerText = "text"
Exit For
End If
Next
myXmlDocument.Save(s)
Catch e As Exception
MsgBox("Error in XmlParsing: " + e.Message)
Return False
End Try
Return True
文本写得正确,但编码更改为UTF-8 with BOM
,并且它也是
添加空格:
<?xml version="1.0" encoding="UTF-8"?>
<some_text>
<ada /> <- here
<file /> <- here
<title><![CDATA[text]]></title>
<code /> <- here
<parathrhseis /> <- here
</some_text>
我如何解决这些问题
解决方案(在Bradley Uffner的帮助下)
Dim fileReader As String
Try
fileReader = My.Computer.FileSystem.ReadAllText("original.xml")
fileReader = fileReader.Replace("<ada />", "<ada/>")
fileReader = fileReader.Replace("<file />", "<file/>")
fileReader = fileReader.Replace("<code />", "<code/>")
fileReader = fileReader.Replace("<parathrhseis />", "<parathrhseis/>")
File.WriteAllText("copy.xml", fileReader) <- File.WriteAllText automatically stores it without the BOM
Catch ex As Exception
MsgBox("Error: " + ex.Message)
Return
End Try
答案 0 :(得分:3)
这实际上不是解析文件的问题,这是一个保存它的问题。
有关如何在没有BOM的情况下保存xml,请参阅此文章。 XDocument: saving XML to file without BOM
相关代码是:
Using writer = New XmlTextWriter(".\file.xml", New UTF8Encoding(False))
doc.Save(writer)
End Using
通常,您可以通过XmlTextWriter的.Settings
属性控制文档的格式,但是我没有看到用于控制自闭元素间距的属性。在保存到文件系统之前,通过将输出保存到流并手动删除“/&gt;”之前的任何空格,您可能会更好地运输后处理输出。