Durchsuchen und auslesen einer .xml

  • VB.NET
  • .NET (FX) 4.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Durchsuchen und auslesen einer .xml

    Hallo,

    schon seit etlichen Stunden versuche ich eine vorhandene .xml zu durchsuchen und deren Elemente in einen String auszulesen.
    Sicherlich gibt es diese Problemstellung schon etliche Male in diesem sowie auch in vielen anderen Foren.
    Ich habe wirklcih alles ausprobiert, bekomme aber keinen Wert zurückgeliefert.
    Vielleicht kann mir einer von euch eine kurze Function zusammenstellen. Ich bin mir meinem Latein am Ende.

    Die Aufgabe:
    Aus der weiter unten aufgeführten .xml soll ein bestimmter Wert gesucht werden und wenn vorhanden dann sollen
    alle dazugehörigen Elemente in einen String (getrennt durch einen Zeilenumbruch) geschrieben werden.

    Beispiel:
    Suche nach "adpt.ldevon" (sofern gefunden) dann schreibe in den String (siehe .xml) "adpt.ldevon+cvrclf+1+vbcrlf+AD+vbcrlf+Logical devices+vbrclf(regex hier leer)"

    Hier die .xml:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!-- argument:
    3. AD - Adapter Information
    4. LD - Logical Device Information
    5. LD# - Logical Device Information for specified Device (example: LD1)
    6. PD - Physical Device Information
    7. AL - All Information (do not use)
    8. -->
    9. <config>
    10. <getconfig>
    11. <function>adpt.conmod</function>
    12. <contoller>1</contoller>
    13. <argument>AD</argument>
    14. <key>Controller Model</key>
    15. <regex></regex>
    16. </getconfig>
    17. <getconfig>
    18. <function>adpt.temp</function>
    19. <contoller>1</contoller>
    20. <argument>AD</argument>
    21. <key>Temperature</key>
    22. <regex></regex>
    23. </getconfig>
    24. <getconfig>
    25. <function>adpt.ldevon</function>
    26. <contoller>1</contoller>
    27. <argument>AD</argument>
    28. <key>Logical devices</key>
    29. <regex></regex>
    30. </getconfig>
    31. <getconfig>
    32. <function>adpt.ldevfail</function>
    33. <contoller>1</contoller>
    34. <argument>AD</argument>
    35. <key>Logical devices</key>
    36. <regex></regex>
    37. </getconfig>
    38. <getconfig>
    39. <function>adpt.ldevdeg</function>
    40. <contoller>1</contoller>
    41. <argument>AD</argument>
    42. <key>Logical devices</key>
    43. <regex></regex>
    44. </getconfig>
    45. </config>


    Hoffe es kann mir jemand auf die schnelle Helfen, denn wie schon gesagt keine meiner gefundenen Lösung hat bisher geklappt.
    Danke

    EcB schrieb:

    "adpt.ldevon+cvrclf+1+vbcrlf+AD+vbcrlf+Logical devices+vbrclf(regex hier leer)"
    Ich hoffe, das cvrclf ist ein Tippfehler.

    Visual Basic-Quellcode

    1. Resultstring = "adpt.ldevon" & vbCrLf & "1" & vbCrLf & "AD" & vbCrLf & "Logical devices" & vbCrLf & "(regex hier leer)"
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ok, vielleicht ein bissl unklar ausgedrückt! :S
    Nicht schreibe String "....", sondern lese die Daten aus den folgenden Elementen der .xml
    und schriebe diese dann in den String:
    <function> + vbCrLf + <controller> + vbCrLf + <argument> + vbCrLf + <key> + vbCrLf + ggf. <regex>
    Ja, aber irgendwie will es nicht klappen.

    Beispiel:

    VB.NET-Quellcode

    1. Dim xml_file As New XmlDocument
    2. xml_file.Load(xml_path)
    3. Dim xml_node As XmlNode = xml_file.SelectSingleNode("/config/getconfig")
    4. If Not (xml_node Is Nothing) Then
    5. Dim nr As New XmlNodeReader(xml_node)
    6. While nr.Read()
    7. Console.WriteLine(nr.Value)
    8. End While
    9. End If


    Keine Rück-/bzw. Ausgabe auf der Konsole.
    OK, die folgende Zeile scheint nicht zu greifen:

    VB.NET-Quellcode

    1. Dim xml_node As XmlNode = xml_file.SelectSingleNode("/config/getconfig")


    Vielen Dank soweit erstmal.
    Werde gleich Morgen weiter daran arbeiten bzw. daran rumpfuschen ;)
    ev. bissl umständlich...aber als Gedankenanstoss auf die Schnelle

    VB.NET-Quellcode

    1. Dim xDoc1 As New XmlDocument
    2. xDoc1.Load("C:\Temp\test.xml")
    3. Dim xDoc2 As XDocument = Nothing
    4. xDoc2 = XDocument.Parse(xDoc1.OuterXml)
    5. For Each el In xDoc2.<config>.Elements("getconfig")
    6. If el.<function>.Value = "adpt.ldevon" Then
    7. For Each subel In el.Elements
    8. MessageBox.Show(subel.Value)
    9. Next
    10. End If
    11. Next

    Ich glaube das Problem mit deiner XMl ist, dass die elemente nicht so schön aufgebaut sind.
    Es müsste so in etwas sein:

    <function>test
    <contoller>1</contoller>
    <argument>AD</argument>
    <key>Controller Model</key>
    </function>

    Dann könnte man viel einfacher suchen.
    Hier könnte meine Signatur stehen.
    Leider hab ich es zeitlich nicht mehr einrichten können noch weiter an meinem XML-Problem zu arbeiten.
    Ich habe das ganze Projekt jetzt auf eine .ini umgestellt. Funktioniert einwandfrei.
    Aber vielen Dank für eure Lösungvorschläge.
    Interessehalber werde das Problem aber bestimmt am WE nochmal durchgehen.

    @ErfinderDesRades
    SingleNode, ähmm, ja, hätte man drauf kommen können.

    @CaMeO
    Vielen Dank, werde es wie gesagt am WE nochmal probieren.

    Tausend Dank an alle! Schönes Wochenende euch.