Daten aus XML-Dokument auslesen

  • VB.NET

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

    Daten aus XML-Dokument auslesen

    Hey Programmierer,

    ich habe eine Frage zum Thema XML-Dokument auslesen.

    Und zwar habe ich folgendes Problem:

    Ich habe ein XML-Dokument welches wie folgt aussieht:

    XML-Quellcode

    1. <careerSavegame revision="1" valid="true" Money="!!!35413!!!" dayTime="579.872803" playTime="35.963310" densityMapRevision="1" resetVehicles="false" mapId="Map01" difficulty="2" autoBackupIndex="1" fuelUsage="6.814551" seedUsage="0.000000" traveledDistance="6.511871" hectaresSeeded="0.000000" seedingDuration="0.009313" hectaresThreshed="0.262462" threshingDuration="8.188432" hectaresWorked="0.154777" revenue="0.000000" expenses="0.000000" currentDay="1" timeSinceLastRain="10000179.000000" longSnowBreakCounter="3" saveDate="24.10.2012" loan="100000" missionFrequency="3" plantGrowthRate="2" loanAnnualInterestRate="100" timeScale="5.000000" completedTransportMissions="0" completedMowingMissions="0" eastState1="0" eastState2="0" foundHorseshoeCount="0" foundHorseshoes="0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" foundHelpIcons="10111111011001" showIconsOnPDA="true">
    2. <farmSiloAmounts count="11">
    3. <farmSiloAmount fillType="grass" amount="0.000000" />
    4. <farmSiloAmount fillType="maize" amount="!!!8447.000000!!!" />
    5. <farmSiloAmount fillType="barley" amount="8977.000000" />
    6. <farmSiloAmount fillType="rape" amount="2898.000000" />
    7. <farmSiloAmount fillType="manure" amount="0.000000" />
    8. <farmSiloAmount fillType="dryGrass" amount="0.000000" />
    9. <farmSiloAmount fillType="chaff" amount="0.000000" />
    10. <farmSiloAmount fillType="liquidManure" amount="0.000000" />
    11. <farmSiloAmount fillType="wheat" amount="11543.330078" />
    12. <farmSiloAmount fillType="potato" amount="8755.000000" />
    13. <farmSiloAmount fillType="sugarBeet" amount="8781.000000" />
    14. </farmSiloAmounts>
    15. ...


    Und möchte die dort mit Ausrufezeichen (!!!) markierten Werte jeweils in einer TextBox anzeigen lassen.

    Hätte da jemand eine Idee für einen VB-Code, bin hier schon total am verzweifeln :wacko:


    Danke im Vorraus für eure Antworten


    Schöne Grüße

    Alpha
    Lösungsansatz kommt sofort -> warte eben nen Moment bitte

    So, los gehts:

    Generell brauchst du das zum Laden einer XML:

    VB.NET-Quellcode

    1. Dim xmldoc As System.Xml.XmlDocument
    2. xmldoc = New System.Xml.XmlDocument
    3. xmldoc.Load(ContactXML_Path)

    Wenn du mehr als einen "careerSavegame"-Knoten in dieser XML hast dann gehts so weiter:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim all_nodes As XmlNodeList = xmldoc.SelectNodes("//careerSavegame")
    2. For Each one_node As XmlNode In all_nodes
    3. 'Ausgabe des Attributs "Money"
    4. msgbox(one_node.Attributes("Money").Value)
    5. 'Noch in der großen Schleife werden dann die Unterknoten gesucht
    6. Dim farmSilo_nodes as XmlNodeList = one_node.SelectNodes("farmSiloAmount")
    7. For Each farmSilo_node As XmlNode In farmSilo_nodes
    8. 'Ausgabe des Attributs "amount"
    9. msgbox(farmSilo_node.Attributes("amount").Value)
    10. Next
    11. Next
    Er geht jeden "careerSavegame"-Knoten durch und holt sich das Attribut.
    Und wenn er das Attribut hat, gehts mit den Unterknoten weiter

    Wenn du aber nur 1 "careerSavegame"-Knoten hast, dann geht das auch so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim one_node as XmlNode = xmldoc.SelectSingleNode("//careerSavegame")
    2. msgbox(one_node.Attributes("Money").Value)
    3. 'Das Attribut "Money" ist ermittelt und es geht weiter zu den Unterknoten
    4. Dim farmSilo_nodes as XmlNodeList = one_node.SelectNodes("farmSiloAmount")
    5. For Each farmSilo_node As XmlNode In farmSilo_nodes
    6. 'Ausgabe des Attributs "amount"
    7. msgbox(farmSilo_node.Attributes("amount").Value)
    8. Next


    [/vb]Hier wird direkt in den einen Knoten gegangen und das Attribut geholt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Don_Batisto“ ()

    Erstmal fettes dankeschön an dich :)

    Aber jetzt habe ich folgendes Problem:

    VB.NET-Quellcode

    1. Imports System.Xml
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. End Sub
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. Dim xmldoc As System.Xml.XmlDocument
    7. xmldoc = New System.Xml.XmlDocument
    8. xmldoc.Load("C:\Users\Alex\Desktop\careerSavegame.xml")
    9. Dim one_node As XmlNode = xmldoc.SelectSingleNode("//careerSavegame")
    10. MsgBox(one_node.Attributes("Money").Value)
    11. 'Das Attribut "Money" ist ermittelt und es geht weiter zu den Unterknoten
    12. Dim farmSilo_nodes As XmlNodeList = one_node.SelectNodes("farmSiloAmount")
    13. For Each farmSilo_node As XmlNode In farmSilo_nodes
    14. 'Ausgabe des Attributs "amount"
    15. MsgBox(farmSilo_node.Attributes("amount").Value)
    16. Next
    17. End Sub
    18. End Class


    Jedes mal wenn ich den Button klicke sagt VB mir: "NullReferenceExeption wurde nicht behandelt." und markiert die Msg(one_node.Attributes("Money").Value)
    @Alpha-Trash: Sry, dass meine Antwort erst so spät kommt...

    Ich habe dein Button-Event leicht angepasst (XML-Datei-Pfad & Knoten-Pfade)
    und so funktioniert es dann:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim xmldoc As System.Xml.XmlDocument
    3. xmldoc = New System.Xml.XmlDocument
    4. xmldoc.Load(XMLDatei)
    5. Dim one_node As XmlNode = xmldoc.SelectSingleNode("//careerSavegame")
    6. MsgBox(one_node.Attributes("Money").Value)
    7. 'Das Attribut "Money" ist ermittelt und es geht weiter zu den Unterknoten
    8. Dim farmSilo_nodes As XmlNodeList = one_node.SelectNodes("//farmSiloAmounts/farmSiloAmount")
    9. For Each farmSilo_node As XmlNode In farmSilo_nodes
    10. 'Ausgabe des Attributs "amount"
    11. MsgBox(farmSilo_node.Attributes("amount").Value)
    12. Next
    13. End Sub


    Dies steht in der XML-Datei:

    XML-Quellcode

    1. <careerSavegame revision="1" valid="true" Money="!!!35413!!!" dayTime="579.872803" playTime="35.963310" densityMapRevision="1" resetVehicles="false" mapId="Map01" difficulty="2" autoBackupIndex="1" fuelUsage="6.814551" seedUsage="0.000000" traveledDistance="6.511871" hectaresSeeded="0.000000" seedingDuration="0.009313" hectaresThreshed="0.262462" threshingDuration="8.188432" hectaresWorked="0.154777" revenue="0.000000" expenses="0.000000" currentDay="1" timeSinceLastRain="10000179.000000" longSnowBreakCounter="3" saveDate="24.10.2012" loan="100000" missionFrequency="3" plantGrowthRate="2" loanAnnualInterestRate="100" timeScale="5.000000" completedTransportMissions="0" completedMowingMissions="0" eastState1="0" eastState2="0" foundHorseshoeCount="0" foundHorseshoes="0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" foundHelpIcons="10111111011001" showIconsOnPDA="true">
    2. <farmSiloAmounts count="11">
    3. <farmSiloAmount fillType="grass" amount="0.000000" />
    4. <farmSiloAmount fillType="maize" amount="!!!8447.000000!!!" />
    5. <farmSiloAmount fillType="barley" amount="8977.000000" />
    6. <farmSiloAmount fillType="rape" amount="2898.000000" />
    7. <farmSiloAmount fillType="manure" amount="0.000000" />
    8. <farmSiloAmount fillType="dryGrass" amount="0.000000" />
    9. <farmSiloAmount fillType="chaff" amount="0.000000" />
    10. <farmSiloAmount fillType="liquidManure" amount="0.000000" />
    11. <farmSiloAmount fillType="wheat" amount="11543.330078" />
    12. <farmSiloAmount fillType="potato" amount="8755.000000" />
    13. <farmSiloAmount fillType="sugarBeet" amount="8781.000000" />
    14. </farmSiloAmounts>
    15. </careerSavegame>

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Don_Batisto“ ()