XML Nodes nach bestimmtem "Wert" suchen

  • VB.NET

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

    XML Nodes nach bestimmtem "Wert" suchen

    Hallo,

    ich habe ein kleines Problem mit dem Auslesen einer XML und habe weder hier noch bei Dr. Google etwas gefunden (oder ich kenne den richtigen Suchbegriff nicht).

    Ich habe eine XML mit folgender Struktur:

    XML-Quellcode

    1. <metadata>
    2. <list>
    3. <sub_list>
    4. <id-list>
    5. <user id="123">
    6. <title>Anton</title>
    7. </user>
    8. <user id="456">
    9. <title>Brian</title>
    10. </user>
    11. <user id="789">
    12. <title>Constantin</title>
    13. </user>
    14. <user id="456">
    15. <title>Dora</title>
    16. </user>
    17. </id-list>
    18. </sub_list>
    19. </list>
    20. </metadata>


    Ich möchte nun alle "title" auslesen bei denen die "user id" 456 ist.
    Wie ich die nodes bekomme funktioniert, ich habe folgenden Code.

    Allerdings finde ich nicht heraus wie ich nach einem Wert filtern kann bzw. ich nur die Element bekomme mit einem bestimmten Wert.

    VB.NET-Quellcode

    1. Dim list As XmlNodeList
    2. list = doc.GetElementsByTagName("user")
    3. For Each node As XmlElement In list
    4. MessageBox.Show(node.GetAttribute("id"))
    5. Next


    Vielleicht hat jemand eine Idee?

    Vielen Dank im voraus und LG
    @maila25 Wie wird denn diese XML geschrieben?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin,

    das könntest du mit SelectNodes machen:

    VB.NET-Quellcode

    1. Dim xml As XmlDocument = New XmlDocument()
    2. xml.LoadXml(str)
    3. Dim list As XmlNodeList = xml.SelectNodes("/metadata/list/user[@id='456']")
    4. For Each xn As XmlNode In list
    5. Console.WriteLine(xn.InnerText)
    6. Next
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Moin,

    sorry für die späte Rückmeldung, habe es so gelöst.

    VB.NET-Quellcode

    1. For Each node As XmlElement In list
    2. Dim clist As XmlNodeList = node.GetElementsByTagName("id-list")
    3. For Each cnode As XmlElement In clist
    4. Dim RID As String = cnode.GetAttribute("user id")
    5. 'Wert 456 wird an die Funktion übergeben
    6. If RID = "456" Then
    7. 'mach irgendwas damit
    8. End If
    9. Next


    Danke und LG