Betimmte Zeile aus XML-Datei lesen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Betimmte Zeile aus XML-Datei lesen

    Hallo,
    ich habe eine XML-Datei erstellt.
    Diese kann ich mit dem MS-Editor bearbeiten.
    Nun möchte ich aber nur einen bestimmten Wert (siehe Code unten) aus einer Zeile lesen.
    Wie mache ich das?

    Gruß George

    <?xml version="1.0" encoding="utf-16"?>
    <Gruppe>
    <Kopftext>
    <Zeile1 name="" />
    <Zeile2 name="" />
    <Zeile3 name="" />
    <Zeile4 name="" />
    <Zeile5 name="" />
    <Zeile6 name="" />
    </Kopftext>
    <Fusstext>
    <Zeile1 name="" />
    <Zeile2 name="" />
    <Zeile3 name="" />
    <Zeile4 name="" />
    <Zeile5 name="" />
    <Zeile6 name="Test6" /> ...Diesen Wert möchte ich lesen
    <Zeile7 name="" />
    <Zeile8 name="" />
    <Zeile9 name="" />
    <Zeile10 name="" />
    </Fusstext>
    </Gruppe>
    Mögliche Stichworte dafür sind
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Wenn XML, dann XML.
    @George über Gruppe=>Fusstext=>Zeile6 durchhangeln.
    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!
    durchhangeln?
    Ja so in etwa habe ich es gemacht.
    Leider bekomme ich es nicht ganz hin.
    Dadurch, das es die Zeile6 im Kopftext sowie auch im Fusstext vorhanden ist,
    ist mir noch nicht klar wie unterschieden wird ob ich
    im Kopftext oder Fusstext die Zeile6 lese.
    Ein kleiner Beispielcode würde mir sicherlich helfen.

    Gruß George

    George schrieb:

    Dadurch, das es die Zeile6 im Kopftext sowie auch im Fusstext vorhanden ist,
    musst Du aus Gruppe den Knoten Fusstext auswählen.
    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!
    Also, das ist alles was ich hier habe...
    Ich hoffe das kommt jetzt auch eingrückt rüber.


    Quellcode

    1. private void ......
    2. {
    3. if (!File.Exists("C:\\test.xml"))
    4. {
    5. return;
    6. }
    7. XmlReader xr = new XmlTextReader("C:\\test.xml");
    8. while (xr.Read())
    9. {
    10. if (xr.NodeType == XmlNodeType.Element)
    11. {
    12. if (xr.AttributeCount > 0
    13. {
    14. while (xr.MoveToNextAttribute())
    15. {
    16. }
    17. }
    18. }
    19. }
    20. }
    21. }

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „George“ ()

    Also mit dem Einrücken funktioniert es bei mir.
    Folgendes passiert bei mir.

    Der Enwicklungsrechner ist nicht im Internet.
    Ich kopiere den Quellencode als Textdatei, übergebe das ganze zum
    Internet-Rechner. Kopiere es als Textdatei und füge es hier im Forum ein.
    Dann kann ich leider das Einrücken vergessen.
    Oder geht es anders?

    George
    @George Ich hab folgendes Beispiel gefunden.
    Form mit Button und ListBox, die XML-Datei unter "C:\Temp\vehicles.xml" ablegen:
    VB-Code

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. ListBox1.Items.Clear()
    4. Dim doc2 As XDocument = XDocument.Load("C:\Temp\vehicles.xml")
    5. For Each node As XElement In doc2.Descendants("onCreateLoadedObject")
    6. Dim fillType As XAttribute = node.Attribute("saveId")
    7. ListBox1.Items.Add("node: " & node.ToString)
    8. If fillType.Value = "Animals_cow" Then
    9. For Each node2 As XElement In node.Descendants("tipTriggerFillLevel")
    10. Dim fillType2 As XAttribute = node2.Attribute("fillType")
    11. If fillType2.Value = "straw" Then
    12. Dim fillType4 As XAttribute = node2.Attribute("fillLevel")
    13. ListBox1.Items.Add(fillType.Value & " - " & fillType4.Value.ToString)
    14. End If
    15. Next
    16. ElseIf fillType.Value = "Animals_pig" Then
    17. For Each node2 As XElement In node.Descendants("tipTriggerFillLevel")
    18. Dim fillType2 As XAttribute = node2.Attribute("fillType")
    19. If fillType2.Value = "straw" Then
    20. Dim fillType4 As XAttribute = node2.Attribute("fillLevel")
    21. ListBox1.Items.Add("***" & fillType.Value & " - " & fillType4.Value.ToString)
    22. End If
    23. Next
    24. End If
    25. Next
    26. End Sub
    27. End Class
    XML-Datei

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!--XML Database.-->
    3. <Data>
    4. <onCreateLoadedObject saveId="Animals_cow" numAnimals0="333" numAnimals1="222" newAnimalPercentage="0" cleanlinessFactor="0" dirtToDrop="0" manureToDrop="0" manureFillLevel="0" liquidManureFillLevel="342">
    5. <tipTriggerFillLevel fillType="hayPellets" tipTriggerIndex="1" fillLevel="0" />
    6. <tipTriggerFillLevel fillType="hayPellets" tipTriggerIndex="2" fillLevel="0" />
    7. <tipTriggerFillLevel fillType="straw" tipTriggerIndex="3" fillLevel="1241" />
    8. <tipTriggerFillLevel fillType="powerFood" tipTriggerIndex="1" fillLevel="0" />
    9. <tipTriggerFillLevel fillType="powerFood" tipTriggerIndex="2" fillLevel="124124" />
    10. <tipTriggerFillLevel fillType="dryGrass_windrow" tipTriggerIndex="1" fillLevel="0" />
    11. <tipTriggerFillLevel fillType="dryGrass_windrow" tipTriggerIndex="2" fillLevel="52313" />
    12. <tipTriggerFillLevel fillType="silage" tipTriggerIndex="1" fillLevel="0" />
    13. <tipTriggerFillLevel fillType="silage" tipTriggerIndex="2" fillLevel="1422" />
    14. <tipTriggerFillLevel fillType="water" tipTriggerIndex="4" fillLevel="5" />
    15. <tipTriggerFillLevel fillType="grass_windrow" tipTriggerIndex="1" fillLevel="4" />
    16. <tipTriggerFillLevel fillType="grass_windrow" tipTriggerIndex="2" fillLevel="55" />
    17. <fillLevelMilk fillLevel="234" />
    18. </onCreateLoadedObject>
    19. <onCreateLoadedObject saveId="Animals_pig" numAnimals0="5" numAnimals1="7" newAnimalPercentage="0" cleanlinessFactor="0" dirtToDrop="0" manureToDrop="0" manureFillLevel="0" liquidManureFillLevel="3254">
    20. <tipTriggerFillLevel fillType="wheat" tipTriggerIndex="1" fillLevel="1" />
    21. <tipTriggerFillLevel fillType="barley" tipTriggerIndex="1" fillLevel="2" />
    22. <tipTriggerFillLevel fillType="rape" tipTriggerIndex="1" fillLevel="3" />
    23. <tipTriggerFillLevel fillType="sunflower" tipTriggerIndex="1" fillLevel="4" />
    24. <tipTriggerFillLevel fillType="soybean" tipTriggerIndex="1" fillLevel="5" />
    25. <tipTriggerFillLevel fillType="maize" tipTriggerIndex="1" fillLevel="6" />
    26. <tipTriggerFillLevel fillType="potato" tipTriggerIndex="1" fillLevel="7" />
    27. <tipTriggerFillLevel fillType="sugarBeet" tipTriggerIndex="1" fillLevel="8" />
    28. <tipTriggerFillLevel fillType="water" tipTriggerIndex="2" fillLevel="9" />
    29. <tipTriggerFillLevel fillType="straw" tipTriggerIndex="3" fillLevel="10" />
    30. <tipTriggerFillLevel fillType="hayPellets" tipTriggerIndex="1" fillLevel="11" />
    31. </onCreateLoadedObject>
    32. <onCreateLoadedObject saveId="Animals_sheep" numAnimals0="37" numAnimals1="12" newAnimalPercentage="0.37777777671817" cleanlinessFactor="0" dirtToDrop="585.12692912418" palletSpawnerFillDelta="1.4210854715202e-14">
    33. <tipTriggerFillLevel fillType="dryGrass_windrow" tipTriggerIndex="1" fillLevel="666" />
    34. <tipTriggerFillLevel fillType="hayPellets" tipTriggerIndex="1" fillLevel="0" />
    35. <tipTriggerFillLevel fillType="water" tipTriggerIndex="2" fillLevel="45164.169270833" />
    36. <tipTriggerFillLevel fillType="grass_windrow" tipTriggerIndex="1" fillLevel="333" />
    37. </onCreateLoadedObject>
    38. </Data>
    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!