您好我已经在VBScript中编写了一个程序,现在我想用For Each
循环替换For
循环。
For Each node In objMSXML.selectNodes(sXPath)
Set li = document.createElement("li")
li.innerText = i & " " & node.text
ul.appendChild li
i = i +1
Next
我无法弄明白,因为我还需要知道从Xpath返回的节点数。
答案 0 :(得分:3)
继续我的initial comment。
selectNodes()
方法返回IXMLDOMNodeList
对象,该对象是NodeList集合。
与任何集合一样,它包含集合对象的通用成员
<强>属性强>
length
- 集合中的节点数<强>方法强>
item
- 访问集合中的各个节点有关成员属性和方法的完整列表,请参阅 IXMLDOMNodeList Members 子>
由于您只需使用For Each
属性来检索集合中的节点数,因此您无需将For
更改为length
循环的逻辑原因。
Option Explicit
Dim node, nodes, li, i, sXPath, NumberOfNodes
Set nodes = objMSXML.selectNodes(sXPath)
'Retrieve number of Nodes
NumberOfNodes = nodes.length
For Each node In nodes
Set li = document.createElement("li")
li.innerText = i & " " & node.text
ul.appendChild li
i = i +1
Next
答案 1 :(得分:2)
.SelectNodes()返回的节点列表是一个具有.length属性的集合,可以使用从零开始的整数索引遍历:
Option Explicit
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sFSpec : sFSpec = oFS.GetAbsolutePathName("..\data\33921005.xml")
Dim oXML : Set oXML = CreateObject("Msxml2.DOMDocument.6.0")
oXML.load sFSpec
If 0 = oXML.parseError Then
Dim ndlName : Set ndlName = oXML.selectNodes("/Envelope/Body/Request/individual/hasName/*")
Dim ndName
For Each ndName In ndlName
WScript.Echo ndName.tagName
Next
Dim iNd
For iNd = 0 To ndlName.length - 1
WScript.Echo iNd, ndlName(iNd).tagName
Next
Else
WScript.Echo oXML.parseError.reason
End If
输出:
cscript 36053711.vbs
firstName
lastName
0 firstName
1 lastName