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
Другие вопросы по тегам