2011-09-16 43 views
2

我知道,在VBScript中我們可以使用documentElement.SelectNodes()來選擇多個XML節點,如下面的例子多個XML節點,的VBScript - 選擇使用一個自閉的標籤

<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> 

基本上我需要得到像這樣的節點數組,並通過獲取屬性值'Text'來循環。

回答

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 
+0

+1,但我會在NodeList中使用一個簡單的'ForEach節點'。 – AnthonyWJones

1

其他一些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 ANDbig

Set xmlNodes = xmlDoc.selectNodes("(MySelections/MySelection[@Text='big'])") 

For Each xmlNode in xmlNodes 
    xmlNode.setAttribute "Text", "large" 
Next 

整個程序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.選擇節點選擇節點

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 
+0

請更正* xmlDoc.Async =「False」*和* xmlDoc.Load(「C:\ MyFile.xml」) * –

+0

你是指「改正」它們是什麼意思? – JohnB

+1

.Async需要布爾(False),而不是字符串(「False」); .Load被稱爲Sub,所以()是僞造的。 –

相關問題