VBScript - выберите несколько узлов XML, которые используют самозакрывающийся тег
Я знаю, что в vbscript мы можем использовать documentElement.SelectNodes(), чтобы выбрать несколько узлов XML, как в следующем примере,
<Vocabulary>
<Word type="noun" level="1">
<English>cat</English>
<Spanish>gato</Spanish>
</Word>
<Word type="verb" level="1">
<English>speak</English>
<Spanish>hablar</Spanish>
</Word>
<Word type="adj" level="1">
<English>big</English>
<Spanish>grande</Spanish>
</Word>
</Vocabulary>
С помощью:
Set NodeList = objXMLDoc.documentElement.selectNodes("Word/English")
Но как это можно сделать для узлов без закрывающего тега, которые вместо этого используют самозакрывающуюся скобку:
<Vocabulary>
<Word type="adj" level="1">
<English Text="big" />
<Spanish Text="grande" />
</Word>
</Vocabulary>
По сути, мне нужно получить массив узлов, подобных этому, и перебрать, например, значение атрибута "Текст".
2 ответа
Решение
Если я правильно понимаю, то же самое.
Подумайте о objXMLDoc.documentElement.selectNodes("Word/English")( index
такие как ваш массив.
Пример печатает Text
атрибуты:
Set NodeList = objXMLDoc.documentElement.selectNodes("Word/English")
For i = 0 To NodeList.length - 1
WScript.Echo NodeList(i).getAttribute("Text")
Next
Несколько других запросов XPath:
<!-- based on this XML -->
<Vocabulary>
<Word type="adj" level="1">
<English Text="big" /><!-- let's change this to "large" -->
<Spanish Text="grande" />
</Word>
</Vocabulary>
1. Выберите все атрибуты Text
Set xmlNodes = xmlDoc.selectNodes("//@Text")
For Each xmlNode in xmlNodes
If xmlNode.Text = "big" Then
xmlNode.Text = "large"
bNodeModified = true
End If
Next
2. Выберите узлы, которые содержат атрибут Text
Set xmlNodes = xmlDoc.selectNodes("(MySelections/MySelection[@Text])")
For Each xmlNode in xmlNodes
If xmlNode.getAttribute("Text") = "big" Then
xmlNode.setAttribute "Text", "large"
End If
Next
3. Выберите узлы, которые содержат атрибут Text
И значение big
Set xmlNodes = xmlDoc.selectNodes("(MySelections/MySelection[@Text='big'])")
For Each xmlNode in xmlNodes
xmlNode.setAttribute "Text", "large"
Next
Вся программа:
Dim xmlDoc, xmlNodes, xmlNode, bNodeModified
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = false
xmlDoc.Load "C:\MyFile.xml"
Set xmlNodes = xmlDoc.selectNodes("//@Text")
bNodeModified = false
For Each xmlNode in xmlNodes
If xmlNode.Text = "big" Then
xmlNode.Text = "large"
bNodeModified = true
End If
Next
If bNodeModified Then
xmlDoc.Save strXmlFile
End If