XML Frage

  • VB.NET
  • .NET (FX) 4.0

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von MajorOli.

    Moin Zusammen. ich möchte den attribut "xmlfilename" aus allen 3 Storeitems auslesen.

    XML:

    XML-Quellcode

    1. <storeItems>
    2. <storeItem xmlFilename="vehicles/bergmannGTW430.xml"/>
    3. <storeItem xmlFilename="vehicles/horschTitan34UW.xml"/>
    4. <storeItem xmlFilename="vehicles/pp20.xml"/>
    5. </storeItems>


    wie stell ich das am besten an?! habe bis jetzt:

    VB.NET-Quellcode

    1. Dim map_an As XDocument = XDocument.Load(Opath & "/modDesc.xml")
    2. Dim map_query_an = From d In map_an.Descendants("modDesc").Elements("storeItems").Elements("storeItem")
    3. Select d.Attribute("xmlFilename").Value
    4. Dim map_query_result As String = map_query_an.FirstOrDefault()


    Danke im vorraus

    Und was kommt mit dem obrigen code raus?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Gut, hast recht xD

    habe grade

    VB.NET-Quellcode

    1. Dim map_an As XDocument = XDocument.Load(Opath & "/modDesc.xml")
    2. Dim map_query_an = From d In map_an.Descendants("modDesc").Elements("storeItems").Elements("storeItem")
    3. Select d.Attribute("xmlFilename").Value
    4. Dim map_query_result As String = map_query_an.All


    gefunden. nur dabei kommt folgender fehler:

    Spoiler anzeigen
    ​Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC36586 Für den Parameter "predicate" der in "Enumerable" definierten Erweiterungsmethode "Public Function All(predicate As Func(Of String, Boolean)) As Boolean" wurde kein Argument angegeben. Modstudio18 C:\Users\nico9\Documents\Visual Studio 2015\Projects\Modstudio18\Modstudio18\Form2.vb 45 Aktiv

    ich denke eher es ist das altbekannte Problem, dass man auslesen will, aber garnix hat, wo man es hinein-lesen kann.

    Aber mit String.Join ist ja alles in einem String - ist ja auch unklar, was weiter damit geschehen soll - vlt. kann man ja tatsächlich was anfangen mit einem String wo vehicles/bergmannGTW430.xml, vehicles/horschTitan34UW.xml, vehicles/pp20.xml drinne steht.
    Noch eine kleine frage... wie kann ich abfragen ob das Element existiert?!

    hab es so probiert aber klappt nicht

    VB.NET-Quellcode

    1. If fullType3.Value = Nothing Then
    2. NumericUpDown1.Enabled = False
    3. Label7.Text = "Füllmenge: Nicht Vorhanden"
    4. Else
    5. NumericUpDown1.Enabled = True
    6. Label7.Text = "Füllmenge: " & fullType3.Value
    7. NumericUpDown1.Value = fullType3.Value
    8. End If


    EDIT: Gelöst mit isNot Nothing

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    @ErfinderDesRades ist mir auch aufgefallen...

    Neues problem...

    VB.NET-Quellcode

    1. For Each node3 As XElement In doc3.Descendants("onCreateLoadedObject")
    2. ' MsgBox(node.Value)
    3. Dim fillType As XAttribute = node3.Attribute("saveId")
    4. ' MsgBox(fillType.Value)
    5. If fillType.Value = "Animals_cow" Then
    6. ' MsgBox(fillType.Value)
    7. 'Dim fillType2 As XElement = node.Element("tipTriggerFillLevel")
    8. 'MsgBox(fillType2.Value)
    9. For Each node4 As XElement In doc3.Descendants("tipTriggerFillLevel")
    10. Dim fillType2 As XAttribute = node4.Attribute("fillType")
    11. If fillType2.Value = "silage" Then
    12. Dim fillType3 As XAttribute = node4.Attribute("fillLevel")
    13. num_cow_straw.Value = fillType3.Value
    14. End If
    15. Next
    16. End If
    17. Next
    18. 'Silage kühe E
    19. 'Test 22
    20. For Each node3 As XElement In doc3.Descendants("onCreateLoadedObject")
    21. ' MsgBox(node.Value)
    22. Dim fillType As XAttribute = node3.Attribute("saveId")
    23. ' MsgBox(fillType.Value)
    24. If fillType.Value = "Animals_cow" Then
    25. ' MsgBox(fillType.Value)
    26. 'Dim fillType2 As XElement = node.Element("tipTriggerFillLevel")
    27. 'MsgBox(fillType2.Value)
    28. For Each node4 As XElement In doc3.Descendants("tipTriggerFillLevel")
    29. Dim fillType2 As XAttribute = node4.Attribute("fillType")
    30. If fillType2.Value = "silage" Then
    31. Dim fillType3 As XAttribute = node4.Attribute("fillLevel")
    32. num_silage_cow.Value = fillType3.Value
    33. End If
    34. Next
    35. End If
    36. Next


    XML dazu:

    XML-Quellcode

    1. <onCreateLoadedObject saveId="Animals_cow" numAnimals0="0" numAnimals1="0" newAnimalPercentage="0" cleanlinessFactor="1" dirtToDrop="0" manureToDrop="0" manureFillLevel="0" liquidManureFillLevel="0">
    2. <tipTriggerFillLevel fillType="straw" tipTriggerIndex="3" fillLevel="55" />
    3. <tipTriggerFillLevel fillType="silage" tipTriggerIndex="1" fillLevel="55" />
    4. <tipTriggerFillLevel fillType="silage" tipTriggerIndex="2" fillLevel="55" />
    5. <tipTriggerFillLevel fillType="powerFood" tipTriggerIndex="1" fillLevel="55" />
    6. <tipTriggerFillLevel fillType="powerFood" tipTriggerIndex="2" fillLevel="55" />
    7. <tipTriggerFillLevel fillType="dryGrass_windrow" tipTriggerIndex="1" fillLevel="55" />
    8. <tipTriggerFillLevel fillType="dryGrass_windrow" tipTriggerIndex="2" fillLevel="55" />
    9. <tipTriggerFillLevel fillType="water" tipTriggerIndex="4" fillLevel="55" />
    10. <tipTriggerFillLevel fillType="grass_windrow" tipTriggerIndex="1" fillLevel="55" />
    11. <tipTriggerFillLevel fillType="grass_windrow" tipTriggerIndex="2" fillLevel="55" />
    12. <fillLevelMilk fillLevel="0" />
    13. </onCreateLoadedObject>


    Er setzt kurz den wert in "num_cow_straw.Value"
    danach setzt er ihn wieder auf 0 warum auch immer und setzt den wert bei "num_silage_cow.Value "

    hat jemand ne idee warum?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    Hallo @xX-Nick-Xx
    so wie ich das sehe willst du num_silage_cow.Value und num_cow_straw.Value den gleichen wert (fillType3.Value) zuordnen.


    VB.NET-Quellcode

    1. If fillType2.Value = "silage" Then 'Hier stehen wir auf dem gewünschten Knoten
    2. Dim fillType3 As XAttribute = node4.Attribute("fillLevel") 'Hier stehen wir auf dem Attribut
    3. 'Der Attributwert kann nun beliebig zugeordnet werden
    4. num_cow_straw.Value = fillType3.Value
    5. num_silage_cow.Value = fillType3.Value
    6. End If

    Es sollte hier dasselbe Ergebnis in einer Schleife rauskommen, was du in 2 Schleifen gemacht hast, mit einer ist es aber wesentlich übersichtlicher.

    Bedenke das du auch im XML Code 2 Knoten mit dem Typ "Silage" hast aber mit unterschiedlichem Index. Die foreach Schleife wird dann immer den letzen Knoten als Wert setzen, da dieser als letztes zugeordnet wird.
    Dabei wird auch der erste Knoten, also der Wert aus tipTriggerIndex="1" überschrieben.

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