循环 xml 以添加缺少的标签

Cycle through xml to add missing tag

我正在处理一个 XML 文件,该文件具有开始标记,后跟一些带有内部文本的子标记。当开始标签再次出现时,前一个标签没有结束标签。例如,文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<invoice>
    <id>999</id>
    <newRa elem="0">
        <createD>20150519</createD>
        <modD>12345</modD>
    </newRa>
    <total>123.99</total>
<invoice>

我想创建一个 vb 子程序,它使用 xPath 在每次出现 "invoice" 时添加一个“/invoice”标签。

应该是这样的:

<?xml version="1.0" encoding="utf-8"?>
<invoice>
    <id>999</id>
    <newRa elem="0">
        <createD>20150519</createD>
        <modD>12345</modD>
    </newRa>
    <total>123.99</total>
</invoice>
<invoice>
...
...

如果文件小到可以完整打开,可以使用:

Dim st As String = My.Computer.FileSystem.ReadAllText("C:\temp\test.xml")
st = st.Replace("</total>", "</total>" & vbCrLf & "</invoice>")
My.Computer.FileSystem.WriteAllText("c:\temp\test.xml", st, False)

如果文件很大,创建一个读取每一行的streamreader,并使用类似于上面st = st.Replace...行的一行来在正确的位置添加额外的标签,并将每一行附加到一个新的文件。