Spezielle Werte aus einer XML Datei filtern

  • VB.NET

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

    Spezielle Werte aus einer XML Datei filtern

    Hallo liebes Forum,
    ich benötige etwas Hilfe im Umgang mit XML Dateien.
    Folgendes Problem: Mir liegt eine XML Datei vor, aus der ich bestimmte Inhalte herausfiltern und an ein anderes Prog übergeben muss. In den unteren Bsp. ist dies "Testinhalt "1 und "Testinhalt 2".

    Mein Quellcode funzt insofern, dass er alle Inhalte des Elements <w:t> an die Variable übergibt. Allerdings benötige ich diese nicht alle, sondern nur die mit der in den Beispielen angegebenen Formatierung. Wie kann ich mich durch die Tags navigieren, sodass ich die Auswahl begrenzen kann? Gibt es eine Möglichkeit, die Inhalte zeilenweise in ein Array zu schreiben? Wenn ja, wie? Ich hoffe, es kam rüber, was ich will. Bin dem Wording nicht so vertraut.


    Danke für Hilfe.

    XML Inhalt Teil 1:
    Spoiler anzeigen

    XML-Quellcode

    1. <w:p wsp:rsidR="00254850" wsp:rsidRDefault="003F1CB1">
    2. <w:pPr>
    3. <w:rPr>
    4. <w:rStyle w:val="IntensiveHervorhebung"/>
    5. </w:rPr>
    6. </w:pPr>
    7. <w:r>
    8. <w:rPr>
    9. <w:rStyle w:val="IntensiveHervorhebung"/>
    10. </w:rPr>
    11. <w:t>Testinhalt 1</w:t>
    12. </w:r>
    13. </w:p>


    XML Inhalt Teil 2:
    Spoiler anzeigen

    XML-Quellcode

    1. <w:p wsp:rsidR="00254850" wsp:rsidRDefault="003F1CB1">
    2. <w:pPr>
    3. <w:pStyle w:val="Listenabsatz"/>
    4. <w:listPr>
    5. <w:ilvl w:val="0"/>
    6. <w:ilfo w:val="1"/>
    7. <wx:t wx:val="·"/>
    8. <wx:font wx:val="Symbol"/>
    9. </w:listPr>
    10. </w:pPr>
    11. <w:r>
    12. <w:t>Testinhalt 2</w:t>
    13. </w:r>
    14. </w:p>


    Quellcode:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    2. Dim XMLReader As Xml.XmlReader = New Xml.XmlTextReader("D:\test.xml")
    3. Dim text As String = ""
    4. ' Es folgt das Auslesen der XML-Datei
    5. With XMLReader
    6. Do While .Read ' Es sind noch Daten vorhanden
    7. If .IsStartElement("w:t") And .IsEmptyElement = False Then
    8. text = text & XMLReader.ReadString()
    9. End If
    10. Loop ' Weiter nach Daten schauen
    11. .Close() ' XMLTextReader schließen
    12. End With
    13. MsgBox(text)
    14. End Sub
    So lese ich bestimmte Knoten aus XMLs aus:

    XmlNode.SelectNodes-Methode

    Dort ist das Beispiel und so könnte es dann in Verbindung mit deinem Code ausschauen:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.IO
    3. Imports System.Xml
    4. public class Sample
    5. public shared sub Main()
    6. Dim xmldoc As New Xml.XmlDocument
    7. xmldoc.LoadXml("DeinPfad")
    8. Dim nodes As Xml.XmlNodeList = xmldoc.SelectNodes("//w:t")
    9. For Each node As Xml.XmlNode In nodes
    10. msgbox(node.InnerText)
    11. Next
    12. end sub
    13. end class


    Habe das ganze jetzt aber nur eben so runtergeschrieben.
    Evtl. musst du beim SelectNodes-Pfad genauer sein, ich meine aber es müsste so reichen
    Hallo,
    sorry für die späte Antwort.

    Ich habe etwas weiterprobiert und bin auf einen anderen Lösungspfad umgeschwenkt. Zum einen weil ich die XML Namespaces net blicke :( und zum anderen weil mir Don_Batistos Vorschlag gleich zu Beginn eine Fehlermeldung für mein XML Dokument ausspuckt. "Fehler in Zeile 1".

    Ich möchte mein XML Dokument Zeilenweise durchgehen. Dabei überprüfe ich, ob die jeweilige Zeile einen bestimmten Ausdruck enthält. Im Erfolgsfall soll der Inhalt der Zeile in eine Variable geschrieben und zur nächsten Zeile gesprungen werden. Mein Quellcode hat nun aber leider einen logischen Fehler, da der Variableninhalt immer wieder überschrieben wird.

    Wie bekomme ich es hin, dass, wenn die erste IF Anweisung erfolgreich war und die Variable Motivator1 einen Inhalt bekommen hat, diese Variable im weiteren Schleifenverlauf unberührt bleibt?

    Vielen Dank für Hilfe.
    Gruß
    Stefan


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.IO
    3. Imports System.Xml
    4. Public Class Form1
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. Dim XMLReader As Xml.XmlReader = New Xml.XmlTextReader("D:\test.xml")
    7. Dim Motivator1 As String = ""
    8. Dim Motivator2 As String = ""
    9. Dim Motivator3 As String = ""
    10. Dim Demotivator1 As String = ""
    11. Dim Demotivator2 As String = ""
    12. Dim Demotivator3 As String = ""
    13. Dim Textzeile As String = ""
    14. ' Es folgt das Auslesen der XML-Datei
    15. With XMLReader
    16. Do While .Read ' Es sind noch Daten vorhanden
    17. If .IsStartElement("w:t") And .IsEmptyElement = False Then
    18. Textzeile = .ReadString()
    19. If Textzeile.Contains("WERT1") Or Textzeile.Contains("WERT2") Or Textzeile.Contains("WERT3") Or Textzeile.Contains("WERT4") Or Textzeile.Contains("WERT5") Or Textzeile.Contains("WERT6") Or Textzeile.Contains("WERT7") Then
    20. Motivator1 = Textzeile
    21. End If
    22. If Textzeile.Contains("WERT1") Or Textzeile.Contains("WERT2") Or Textzeile.Contains("WERT3") Or Textzeile.Contains("WERT4") Or Textzeile.Contains("WERT5") Or Textzeile.Contains("WERT6") Or Textzeile.Contains("WERT7") Then
    23. Motivator2 = Textzeile
    24. End If
    25. If Textzeile.Contains("WERT1") Or Textzeile.Contains("WERT2") Or Textzeile.Contains("WERT3") Or Textzeile.Contains("WERT4") Or Textzeile.Contains("WERT5") Or Textzeile.Contains("WERT6") Or Textzeile.Contains("WERT7") Then
    26. Motivator3 = Textzeile
    27. End If
    28. If Textzeile.Contains("WERT1") Or Textzeile.Contains("WERT2") Or Textzeile.Contains("WERT3") Or Textzeile.Contains("WERT4") Or Textzeile.Contains("WERT5") Or Textzeile.Contains("WERT6") Or Textzeile.Contains("WERT7") Then
    29. Demotivator1 = Textzeile
    30. End If
    31. If Textzeile.Contains("WERT1") Or Textzeile.Contains("WERT2") Or Textzeile.Contains("WERT3") Or Textzeile.Contains("WERT4") Or Textzeile.Contains("WERT5") Or Textzeile.Contains("WERT6") Or Textzeile.Contains("WERT7") Then
    32. Demotivator2 = Textzeile
    33. End If
    34. If Textzeile.Contains("WERT1") Or Textzeile.Contains("WERT2") Or Textzeile.Contains("WERT3") Or Textzeile.Contains("WERT4") Or Textzeile.Contains("WERT5") Or Textzeile.Contains("WERT6") Or Textzeile.Contains("WERT7") Then
    35. Demotivator3 = Textzeile
    36. End If
    37. MsgBox(Motivator1)
    38. End If
    39. Loop ' Weiter nach Daten schauen
    40. .Close() ' XMLTextReader schließen
    41. End With
    42. MsgBox(Motivator1)
    43. MsgBox(Motivator2)
    44. MsgBox(Motivator3)
    45. MsgBox(Demotivator1)
    46. MsgBox(Demotivator2)
    47. MsgBox(Demotivator3)
    48. End Sub
    49. End Class