Gab: Komplexes XML auslesen, wie

Hallo,

ich kämpfe mit folgender Struktur:

<data>
    <struct>
      <var name="inhalt">
        <struct>
          <var>
            <array length="5">
              <struct>
                <var name="id">
                  <string>1111</string>
                </var>
                <var name="inhalt">
                  <string>blabla</string>
                </var>
              </struct>
              <struct>
                <var name="id">
                  <string>1112</string>
                </var>
                <var name="inhalt">
                  <string>blabla</string>
                </var>
              </struct>
              <struct>
                <var name="id">
                  <string>1113</string>
                </var>
                <var name="inhalt">
                  <string>blabla</string>
                </var>
              </struct>

</array>
          </var>
        </struct>
      </var>
    </struct>
  </data>

Auslesen muß ich den tag <string> beim tag <var name="id">.
Bislang schaffe ich es nur, den ersten der fünf anzusprechen mit VBScript, alle weiteren erreiche ich nicht.
Hat jemand eine Idee?

Danke
Gab

  1. Hallo,

    Auslesen muß ich den tag <string> beim tag <var name="id">.
    Bislang schaffe ich es nur, den ersten der fünf anzusprechen mit VBScript, alle weiteren erreiche ich nicht.
    Hat jemand eine Idee?

    Dim xmlDoc As New Msxml2.DOMDocument40
    Dim objNodeList As IXMLDOMNodeList
    xmlDoc.async = False
    xmlDoc.resolveExternals = False
    xmlDoc.Load "foo.xml"
    If (xmlDoc.parseError.errorCode != 0) Then
       Dim myErr
       Set myErr = xmlDoc.parseError
       MsgBox("You have error " & myErr.reason)
    Else
       xmlDoc.setProperty "SelectionLanguage", "XPath"
       Set objNodeList = xmlDoc.documentElement.selectNodes("//string[parent::var[@name = 'id']]")
       MsgBox objNodeList.length
    End If

    Grüße
    Thomas

    1. Danke Thomas,

      aber so bekomme ich nur die Anzahl der Elemente. Wie aber hole ich mir eins nach dem anderen den Inhalt der jeweiligen Elemente heraus?

      Grüße
      Gab

      1. Hallo,

        aber so bekomme ich nur die Anzahl der Elemente.

        Ja, klar.

        Wie aber hole ich mir eins nach dem anderen den Inhalt der jeweiligen Elemente heraus?

        Ich dachte du kennst dich mit VB aus!? (*

        Else
           xmlDoc.setProperty "SelectionLanguage", "XPath"
           Set objNodeList = xmlDoc.documentElement.selectNodes("//string[parent::var[@name = 'id']]")
           For i = 0 To (objNodeList.length - 1)
              Set objNode = objNodeList.nextNode
              MsgBox objNode.Text
           Next
        End If

        Statt dem "MsgBox objNode.Text" (das dir den Text ausgibt) muss du natürlich das machen, was du mit dem Inhalt vom <string> machen willst.

        Grüße
        Thomas

        PS: * die Beispiele hier sind aus dem MSXML4.0 SDK ich habe sie nur für dich angepasst.

        1. Danke.

          Ich dachte du kennst dich mit VB aus!? (*

          Mit VBScripit etwas, mit VB nicht, und mit XPath erst recht nicht.
          Daher nochmals:
          Danke
          Gab