我正在尝试重命名父节点中存在两个子节点的子节点,并使用更新的信息创建一个新的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
答案 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>