解析xml文件而不更改编码并保留文件格式

时间:2014-04-21 15:23:36

标签: xml vb.net encoding

原始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

1 个答案:

答案 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;”之前的任何空格,您可能会更好地运输后处理输出。