重命名子节点,其中有两个相同

时间:2017-03-30 01:55:41

标签: xml vbscript

我正在尝试重命名父节点中存在两个子节点的子节点,并使用更新的信息创建一个新的XML文件。可能有父节点<Accounts>有一个子节点,但是那里有存在具有相同名称的第二个子节点,我想将其重命名为<Account2></Account2>。我有一些代码,我读取整个XML文件并重命名节点,但我知道这不是正确的方法。

例如,XML数据类似于以下内容:

<Accounts>
    <Account>Value</Account>
    <Account>Value</Account>
</Accounts>

VBScript:

Dim objFSO, objTextFile, strText, strNewText, objNewFile
Dim strOriginalFile, strTempFile

strOriginalFile = "c:\XML_File.xml"

strTempFile = "c:\temp.xml"

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objNewFile = objFSO.CreateTextFile(strTempFile)

Set objTextFile = objFSO.OpenTextFile (strOriginalFile, 1)
strText = objTextFile.ReadAll

strNewText = Replace(strText, "<Account>", "<Account2>", vbTextCompare)

objNewFile.Write strNewText

objTextFile.Close
objNewFile.Close

1 个答案:

答案 0 :(得分:1)

使用XPath表示法,您可以根据上下文访问子节点。循环遍历每个<Account>子节点,将其替换为枚举节点,该节点是旧节点的深层副本。

Set xml = CreateObject("Microsoft.XMLDOM")

xml.async = False
count_var = 1

If xml.Load("C:\file.xml") Then
    For Each accountCollection In xml.SelectNodes("//Accounts")
        For Each account In accountCollection.SelectNodes("./Account")
            If count_var > 1 Then

                Set accountEnum = xml.createNode(1, "Account" & count_var, "")
                For Each child In account.childNodes
                    accountEnum.appendChild(child.cloneNode(TRUE))
                Next
                accountCollection.replaceChild accountEnum, account

                xml.save("C:\file.xml")
            End If
            count_var = count_var + 1
        Next
        count_var = 1
    Next
End If

<强>输入:

<Accounts>
    <Account>test</Account>
    <Account>
        <ID>000</ID>
        <CONFIG type="binary" name="test"/>
    </Account>
    <Account>test1</Account>
</Accounts>

<强>输出

<Accounts>
    <Account>test</Account>
    <Account2>
        <ID>000</ID>
        <CONFIG type="binary" name="test"/>
    </Account2>
    <Account3>test1</Account3>
</Accounts>