VBScript - выберите несколько узлов XML, которые используют самозакрывающийся тег - PullRequest
2 голосов
/ 16 сентября 2011

Я знаю, что в 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 ]

2 голосов
/ 16 сентября 2011

Если я правильно понимаю, то же самое.
Подумайте о 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
1 голос
/ 28 июня 2012

Несколько других запросов 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...