Итерировать с XMLDOM и vbs

Может ли кто-нибудь дать мне подсказку, как получить значения из G_Q9, если значение в G_Q1 равно x? Если значение G_Q1 ‹> x, переходите к следующему G_Q1. Мне не нравится формат XML-файла, но я должен адаптироваться к нему.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Generated by Oracle Reports version 12.2.1.3.0 -->
<WOKE611>
  <LIST_G_Q1>
    <G_Q1>
      <Value>1234</Value>
      <LIST_G_Q9>
        <G_Q9>
          <Value>0</Value>
        </G_Q9>
        <G_Q9>
          <Value>1</Value>
        </G_Q9>
      </LIST_G_Q9>
    </G_Q1>
   <G_Q1>
      <Value>5678</Value>
      <LIST_G_Q9>
        <G_Q9>
          <Value>0</Value>
        </G_Q9>
        <G_Q9>
          <Value>1</Value>
        </G_Q9>
      </LIST_G_Q9>
    </G_Q1>
  </LIST_G_Q1>
</WOKE611>
Dim i

Set objXMLDoc = CreateObject("Msxml2.DOMDocument.6.0") 
objXMLDoc.Async = False 
objXMLDoc.Load("C:\temp\shortXml.xml")
Set NodeList = objXMLDoc.SelectNodes("//G_Q1/*")

For i = 1 To NodeList.Length 
    Set CurrNode = NodeList.NextNode
    If CurrNode.Text = "1234" Then
        WScript.Echo("How to continue to get the value of G_Q9/Value ?")
    End If
Next

Я решил это, изменив SelectNodes("//G_Q1/*") на SelectNodes("//*").


person sova64    schedule 28.02.2019    source источник
comment
@Lankymart На самом деле не дубликат, по крайней мере, этого вопроса, поскольку вопреки ответу, отредактированному OP, фактический вопрос не касается обхода всей структуры XML.   -  person Ansgar Wiechers    schedule 01.03.2019
comment
@AnsgarWiechers Я решил это, изменив SelectNodes (// G_Q1 /) на SelectNodes (//*).*. Тем не менее, это вопрос об обходе XMLDOM (целиком или частично), который описывался снова и снова.   -  person user692942    schedule 01.03.2019
comment
Пожалуйста, перечитайте то, что я только что написал.   -  person Ansgar Wiechers    schedule 01.03.2019


Ответы (1)


Очевидно, что невозможно, чтобы предполагаемое решение, которое вы добавили в свой вопрос, на самом деле решило бы описанную вами проблему (по крайней мере, без дальнейших изменений в вашем коде), поскольку оно будет перебирать все узлы XML вместо выбора только те ценности, которые вам нужны.

Правильное решение проблемы могло бы выглядеть примерно так:

xpath = "//G_Q1[Value='1234']/LIST_G_Q9/G_Q9/Value"
Set NodeList = objXMLDoc.SelectNodes(xpath)
For Each n In NodeList
    WScript.Echo n.Text
Next

Замените WScript.Echo n.Text любой другой обработкой, которую вам нужно выполнить.

person Ansgar Wiechers    schedule 01.03.2019