Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

XML auslesen.... HELP
#1
Hallo,

ich habe eine Verständnisfrage zu einer Umsetzung einer Programmierung. Ein wenig Erfahrung mit XML per MSXML2.DOMDocument habe ich bereits gesammelt und bin auch soweit zurecht gekommen. Ich bin kein Profi und bringe mir das autodidaktisch bei. Jetzt hänge ich aber irgendwie gedanklich fest und es macht einfach nicht klick. Vielleicht kann jemand mit ein Tipp geben.

Ich möchte im ersten Schritt zu jedem die auslesen für alle (Unter-)Ebenen.
Wenn ich das per... 

Code:
Set xmlObj = CreateObject("MSXML2.DOMDocument")
    xmlObj.async = False
    xmlObj.validateOnParse = False
    xmlObj.LoadXML hReq.responseText
Set nodesThatMatter = xmlObj.SelectNodes("//Fragenkatalog/item")
    For Each Node In nodesThatMatter
    .....

...Abfrage, erhalte ich ja nur die ITEM der ersten Ebene und ich weiß nicht wie ich die weiteren Ebenen mit Items auslesen kann.
Wie kann ich alle ITEMS aller Ebenen nacheinander durchgehen und auslesen?

Diese Beispiel XML ist nur ein Beispiel und soll nur die Struktur darstellen.
XML Beispiel - Wichtig ist noch außer "Fragenkatalog" gibt es noch andere, es sollen nur die ITEMS des Fragenkatalogs inkl Unterebenen ausgelesen werden.
Code:
<entry>
       <resource>
        <Fragenkatalog>
            <id value="666"/>
            <item>
                <linkId value="5"/>
                <item>
                    <linkId value="15"/>
                    <item>
                        <linkId value="115"/>
                        <answer>
                            <valueString value="Text1"/>
                        </answer>
                    </item>
                </item>
            </item>
            <item>
                <linkId value="8"/>
                <item>
                    <linkId value="18"/>
                    <item>
                        <linkId value="118"/>
                        <answer>
                            <valueString value="Text2"/>
                        </answer>
                        <linkId value="128"/>
                        <answer>
                            <valueString value="Text3"/>
                        </answer>
                    </item>
                </item>
                <linkId value="9"/>
                <item>
                    <linkId value="119"/>
                    <answer>
                        <valueString value="Text4"/>
                    </answer>
                </item>
            </item>
        </Fragenkatalog>
    </resource>
</entry>


Vielen Danke für Rückmeldungen

VG

Kinpio
Antworten Top
#2
Ich würde es mit: Daten > Daten abrufen > Aus Datei > Aus XML versuchen.
Antworten Top
#3
Hallöchen,

um nochmal beim Code zu bleiben, in Deiner Schleife

Code:
For Each Node In xmlDoc.SelectNodes("...")
        Rekursiv_Auslesen Node 'funktioniert mit Node als Element und Node
Next

Im Sub Rekursiv_Auslesen holst Du die ersten Daten und rufst selbiges Sub am Ende weiter auf:

Code:
Sub Rekursiv_Auslesen(xmlNode As MSXML2.IXMLDOMNode)
    Dim xmlTmp As MSXML2.IXMLDOMNode
    Dim xmlTmpElem As MSXML2.IXMLDOMElement
    Dim xmlAttribut As MSXML2.IXMLDOMAttribute              ' Einzelattribut
    Dim iCnt2%
    'Wenn das aktuelle Element ein Knoten ist...
    If xmlNode.NodeType = NODE_ELEMENT Then
        Set xmlTmpElem = xmlNode
        Debug.Print xmlTmpElem.nodeName; vbTab; xmlTmpElem.BaseName
        'Falls das Element nicht das Wurzelelement ist...
        If xmlTmpElem.BaseName <> xmlNode.OwnerDocument.DocumentElement.BaseName Then
    'Einlesen der Daten ...
    '...
    '...
        End If
    End If

    If xmlNode.HasChildNodes = True Then
        For Each xmlTmp In xmlNode.ChildNodes()
            'Rekursives Aufrufen der Funktion
            Rekursiv_Auslesen xmlTmp
        Next xmlTmp
    End If
End Sub


Allerdings hab ich mich damit vor über 10 Jahren in einem Projekt beschäftigt und seitdem nicht wieder ... Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
Hallo,

@schauan

Das war GOLD wert! Vielen DANK! Das hat wirklich sehr geholfen. 
Ich arbeite mich da noch etwas durch, aber der erste Test lief schon ganz gut.
Auslesen mit "SelectSingleNode" hat nicht geklappt, aber mit "xmlTmpElem.Attributes(0)" habe ich das gewünschte Ergebnis bekommen.


@ ws - 53

Danke für Deine Antwort, aber es sollte aus verschiedenen Gründen per VBA erfolgen. Ich benötige z. B. von den 2500 "Zeilen" nur wenige Angaben. 


VG

Kinopio
Antworten Top
#5
(19.05.2023, 07:44)Kinopio schrieb: ...aber es sollte aus verschiedenen Gründen per VBA erfolgen. Ich benötige z. B. von den 2500 "Zeilen" nur wenige Angaben. 

...was ist denn das für ein seltsames Argument? Das Einzige, was gegen PQ sprechen würde wäre, man kennt sich damit nicht aus und will oder kann sich auch nicht damit beschäftigen. 
Kann ich ja verstehen, wenn man genügend andere Dinge hat, um die man sich kümmern muss, aber dann kann man das auch sagen... ist doch harter, realer Arbeitsalltag...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste