У меня есть образец XML-файла, который сконструирован следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<ParentLevel1>
<ParentLevel2>
<ParentLevel3>
<ParentLevel4>
<MyNode>Data 1</MyNode>
<MyNode>Data 2</MyNode>
<MyNode>Data 3</MyNode>
<MyNode>Data 4</MyNode>
<MyNode>Data 5</MyNode>
<MyNode>Data 6</MyNode>
</ParentLevel4>
<ParentLevel4additional>My Data Matches</ParentLevel4additional>
</ParentLevel3>
<ParentLevel3>
<ParentLevel4>
<MyNode>Data 7</MyNode>
<MyNode>Data 8</MyNode>
<MyNode>Data 9</MyNode>
<MyNode>Data 10</MyNode>
<MyNode>Data 11</MyNode>
<MyNode>Data 12</MyNode>
</ParentLevel4>
<ParentLevel4additional>My Data does not Match</ParentLevel4additional>
</ParentLevel3>
</ParentLevel2>
</ParentLevel1>
Мне нужно количество узлов <MyNode>
под узлом ParentLevel4
, если значение ParentLevel4additional
равно "Мои совпадения данных"".
Я попытался с помощью приведенного ниже сценария, но не смог найти решение:
MyNodeCount = 0
AdditionNodeCount = 0
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "False"
If (xmlDoc.Load(strXMLFile)) Then
Set AdditionNode =xmlDoc.selectNodes ("//ParentLevel1/ParentLevel2/ParentLevel3/ParentLevel4additional/")
For Each ParentLevel4additional in AdditionNode
if ParentLevel4additional.Text = "My Data Matches" Then
Set ObjMyNodes=xmlDoc.selectNodes ("//ParentLevel1/ParentLevel2/ParentLevel4/MyNode/")
For Each MyNode in ObjMyNodes
MyNodeCount = MyNodeCount + 1
Next
AdditionNodeCount = AdditionNodeCount + 1
End If
Next
Wscript.Echo MyNodeCount
Wscript.Echo AdditionNodeCount
Else
WScript.Echo "Error loading XML file '" & strXMLFile & "'." & vbCrLf & _
"Error code: 0x" & Hex(xmlDoc.ParseError.ErrorCode) & vbCrLf & _
"Description: " & xmlDoc.ParseError.Reason & vbCrLf & _
"Line: " & xmlDoc.ParseError.Line & vbCrLf & _
"Character: " & xmlDoc.ParseError.LinePos
WScript.Quit 1
End If