XML - Abfrage von Attributen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Samus Aran.

    XML - Abfrage von Attributen

    Hallo Forum,

    bin neu hier und beschäftige mich gerade mit dem Thema XML.
    Es geht darum, ich bekomme aus einer Anwendung ein XML - File, welches ich weiterverarbeiten soll.
    Aus diesem Grund ist es notwendig, auf einzelne Attributwerte innerhalb des XML zuzugreifen.
    Hierfür habe ich mich mit den Möglichkeiten von Linq 2 XML beschäftigt, komme aber nicht mehr weiter und hoffe auf diesem Wege Hilfe zu finden.

    Mein XML - File sieht vom Aufbau wie folgt aus:
    <xml>

    <reference>

    <kindelement name="Artikelnummer" value="12345"/>

    <kindelement name="Artikelname" value="Papier weiß"/>

    <kindelement name="Mengeneinheit" value="kg"/>

    </reference>


    </xml>

    Ich möchte nun mittels einer Abfrage den Inhalt des Attributes value (kg) erhalten, welches sich im selben Element wie das Attribut name mit dem Wert Mengeneinheit befindet.

    Gruß
    Markus
    An deiner stelle würde ich die xml datei anders aufbauen z.B. so:

    XML-Quellcode

    1. <xml>
    2. <reference>
    3. <Artikelnummer Attribut="Irgendeinwert">12345</Artikelnummer>
    4. <Artikelname>Papier weiß</Artikelname>
    5. <Mengeneinheit>kg</Mengeneinheit>
    6. </reference>
    7. </xml>


    Dann kannst du per system.xml.LinQ.XDokument die werte ganz einfach auslesen.
    Wert eines Knoten:

    VB.NET-Quellcode

    1. Dim Doc as XDokument = XDokument.Load("Dateiname")
    2. tbArtNummer.Text = Doc.Root.<reference>.<Aritkelnummer>.Value

    Attribute:

    VB.NET-Quellcode

    1. tbAttribut.Text = Doc.Root.<reference>.<Aritkelnummer>.@Attribut



    Der code ist aus dem Kopf heraus geschriben kann also sein das du noch kleine änderungen vornehmen muss.
    Wer auch immer dieses Programm geschrieben hat, hielt nicht viel von Usability, ich kann dich verstehen. :pinch:

    XML-Quellcode

    1. <xml>
    2. <reference>
    3. <kindelement name="Artikelnummer" value="12345"/>
    4. <kindelement name="Artikelname" value="Papier weiss"/>
    5. <kindelement name="Mengeneinheit" value="kg"/>
    6. </reference>
    7. </xml>

    ^Das ist deine XML-Datei (Edit: Ich hab ß durch ss ersetzt, mit anderen Sonderzeichen müsstet ihr das auch machen, sonst funktioniert der Code nicht).
    Sehen spätere XML-Dateien auch so aus, oder haben die mehrere <reference>-Objekte?

    Edit: Weil ich gerade gut drauf bin, hier C&P:

    VB.NET-Quellcode

    1. Sub readXML()
    2. Try
    3. Dim xmldoc As New XmlDocument
    4. Dim node As XmlNode
    5. xmldoc.Load("usability.xml") 'Hat im Beispiel den exakten Aufbau der XML-Datei weiter oben in meinem Post
    6. Dim nodelist As XmlNodeList = xmldoc.SelectNodes("/xml/reference")
    7. For Each node In nodelist
    8. For Each item In node.ChildNodes
    9. Trace.WriteLine(item.Attributes.GetNamedItem("name").Value & ": " & item.Attributes.GetNamedItem("value").Value)
    10. Next
    11. Next
    12. Catch ex As Exception
    13. Trace.WriteLine(ex.Message)
    14. End Try
    15. End Sub

    Ausgabe in Visual Studio schrieb:

    Artikelnummer: 12345
    Artikelname: Papier weiss
    Mengeneinheit: kg

    Wie gesagt, das Programm kriegt bei Sonderzeichen wie ä, ö, ü, ß Schluckauf und schmeißt ne Exception (fünf, um genau zu sein ^^), aber das liegt daran, dass das Programm, welches die XML-Datei generiert, keine vernünftige Deklaration der XML-Datei gebacken bekommt.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Samus Aran“ ()