XML abfragen?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von FatFire.

    XML abfragen?

    Hi,

    ich steh wie Kuh vorm Berg und weiß nicht weiter…
    Ich möchte eine XML in meiner App laden um mein GUI multilang zu ermöglichen.

    Dazu habe ich folgendes gemacht:



    VB.NET-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <de>
    3. <defaultPage>
    4. <name>Peter</name>
    5. <ort name=“duesseldorf“ id=“meinOrt“>Düsseldorf</ort>
    6. <plz>123456</plz>
    7. </defaultPage>
    8. </de>
    9. <en>
    10. .
    11. ..
    12. </en>



    VB.NET-Quellcode

    1. Dim XmlData = XmlReader.Create(Server.MapPath("XMLFile.xml"))
    2. XmlData .read()



    Aber wie gehts dan weiter? ich habe schon alles mögliche ausprobiert was fehler ergab oder mir nur die komplette XML zurückgeliefert hat.
    Ich habe mal gelesen, dass es möglich ist direkt auf die Knoten und deren Values zuzugreifen… nur wie?

    ich möchte auf „ort“ zugreifen per name oder id… geht das nicht? ?(


    gruß
    matthias
    Es gibt auch eine Möglichkeit ohne XPath...allerdings mache ich das mit dem Einlesen schon immer ganz anders. Z.B. so

    VB.NET-Quellcode

    1. Dim XmlDoc As New XmlDocument
    2. XmlDoc.Load(Server.MapPath("XMLFile.xml"))
    3. ' Und hier dann alle Knoten mit Namen "Ort" raussuchen.
    4. ' Per GetElementByID kannst Du auch nach ID suchen
    5. Dim OrtNodes As XmlNodeList = XmlDoc.GetElementsByTagName("Ort")
    6. For Each OrtNode As XmlNode In OrtNodes
    7. Console.WriteLine(OrtNode.InnerText)
    8. Next

    XPath kannst Du so dann auch nutzen mittels SelectNodes auf XmlDoc.

    Gruß FatFire

    PS: Ja, irgendwie geht das auch mit den XMLReader-Kram...aber wozu?
    Wieso nicht XPath benutzen, wenn es genau dafür definiert wurde ? Erst einmal vielleicht das XML Document mit 1 einzigen Root <language> definieren :

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <language>
    3. <de>
    4. <defaultPage>
    5. <name>Peter</name>
    6. <ort name="duesseldorf" id="meinort">Duesseldorf</ort>
    7. <plz>123456</plz>
    8. </defaultPage>
    9. </de>
    10. <en>
    11. </en>
    12. </language>


    Dann kannst Du auf id so zugreifen:

    VB.NET-Quellcode

    1. xmlDoc = New System.Xml.XmlDocument()
    2. xmlDoc.Load("Lang.xml")
    3. Dim x As XmlNode = xmlDoc.SelectSingleNode("//*[@id='meinOrt']")
    4. Debug.Print(x.InnerText)

    So durchsucht er alle nodes bis er eins findet, bei dem die id='meinOrt' ist.

    Wie auch bei FatFire's Beispiel bist Du selbst dafür verantwortlich, dass id eindeutig ist, sonst musst Du selber einen DTD definieren. Woher soll XML sonst wissen, dass das Attribut id eindeutig ist ?
    Wieso nicht XPath benutzen, wenn es genau dafür definiert wurde ?

    Hm, die Frage kann man öfter stellen.
    Wieso nicht RegEx benutzen, wenn es zum Suchen in einem Text definiert wurde? Weil es mit contains und indexof in vielen Fällen einfacher geht.
    Wieso nicht Assembler programmieren, wenn es zum Programmieren eines Computers definiert wurde? Weil es mit Hochsprachen schneller und einfacher geht.
    Es ist sicher nicht verkehrt XPath zu beherrschen...aber es ist auch schön, wenn man es nicht lernen muss :rolleyes:

    Gruß FatFire
    Hm, die Frage kann man öfter stellen.
    Wieso nicht RegEx benutzen, wenn es zum Suchen in einem Text definiert wurde? Weil es mit contains und indexof in vielen Fällen einfacher geht.
    Wieso nicht Assembler programmieren, wenn es zum Programmieren eines Computers definiert wurde? Weil es mit Hochsprachen schneller und einfacher geht.
    Es ist sicher nicht verkehrt XPath zu beherrschen...aber es ist auch schön, wenn man es nicht lernen muss :rolleyes:


    Ich widerspreche Dir nicht grundsätzlich, man sollte bei Lösungen oder Hilfe immer überlegen
    - was der Wissenstand von mir selbst oder dem Fragenden ist
    - ob es ein Einzelproblem vorliegt oder das Problem öfter auftritt

    Wenn ein Anfänger nur ein einziges Mal einen String auf numerischen Inhalt abprüfen möchte, so werde ich ihm kein Beispiel mit Regex nennen, sondern ihm eine Schleife zeigen mit der er die einzelnen Chars in einer Schleife durchlaufen kann und auf isNumeric abprüft. Man kann danach immer noch darauf hinweisen, dass es mit Regex einfacher geht.

    Ist der Wissensstand höher und/oder es ist klar, daß die Lösung häufiger Einsatz findet, so werde ich ihn gleich auf Regex hinweisen; - schliesslich lohnt sich hier die Einarbeitung und ich überfordere ihn auch nicht.

    Bei Dravus Problem denke ich lohnt sich daher die Einarbeitung in XPath, die übrigens nicht so komplex ist wie Regex.

    Bei Deiner Lösung habe ich jetzt zwar schnell eine Liste von XMLNodes , aber was passiert wenn ich jetzt nach Attributen suche, entweder in allen nodes oder bei bestimmten Nodes <en> ?

    Genau: wie bei HTMLDocument fange ich jetzt an mir eine eigene/mehrere Suchfunktion zu stricken (meist mit einem Haufen Overloads) die mir meine Nodes durchsucht ;) Und je nach Problem wird das immer komplexer ...

    Und deshalb lieber gleich XPath ...

    Ausserdem: einen gewissen Anspruch sollten wir in diesem Forum doch bewahren - oder ? ;)
    Ausserdem: einen gewissen Anspruch sollten wir in diesem Forum doch bewahren - oder ? ;)

    Würde ich sehr gerne. Nur leider erhält man des öfteren den Eindruck (also nicht bei dem Thema hier), dass das wohl nicht der allgemeine Zeitgeist ist und gerade die Laufkundschaft gänzlich andere Ansprüche hat.
    Daher antworte ich meistens so einfach und präzise wie möglich auf die Frage. Nur manche bringen mich so auf die Palme, die lass ich dann auch mal zappeln :D

    Generell sehe ich das so wie Du, aber aus der Frage am Anfang zog ich für mich halt den Schluss, dass das mächtige Werkzeug XPath hier nicht zwingend benötigt wird. Und gerade als Anfänger gezwungen zu sein, sich selber, mit Grundwerkzeugen als Basis, eigene Suchalgorithmen zu basteln ist bestimmt auch nicht das schlimmste, was einem passieren kann ;)

    Gruß FatFore