List of T durchsuchen mit Daten aus XML-Datei?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    List of T durchsuchen mit Daten aus XML-Datei?

    Hallo,

    ich habe eine List (of BindingObject) namens "Bindinglist", mit:

    VB.NET-Quellcode

    1. Public Class BindingObject
    2. Private _BoundControl As Control
    3. Public Property BoundControl() As Control
    4. Get
    5. Return _BoundControl
    6. End Get
    7. Set(ByVal value As Control)
    8. _BoundControl = value
    9. End Set
    10. End Property
    11. 'weitere Properties
    12. End Class



    Ich durchsuche diese List mit einer einfachen Funktion nach dem Index eines Controls mit einem bestimmten Control.Name:

    VB.NET-Quellcode

    1. Public Function FindBindingIndex(ByVal tmpBoundControlName As String) As Integer
    2. Return BindingList.FindIndex(Function(c) c.BoundControl.Name Is tmpBoundControlName)
    3. End Function


    Wenn ich den Namen eines Controls als String manuell übergebe, spuckt die Funktion auch sauber den Index aus!



    Nun möchte ich die Funktion aber mit Daten aus einer XML-Datei füttern.

    Die Datei:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    2. <Table>
    3. <DataNode>
    4. <ID>RTxBx_Vehicle_Description</ID>
    5. <Value>Testmission</Value>
    6. </DataNode>
    7. <DataNode>
    8. <ID>GrpDeactivate_MissionConstraints</ID>
    9. <Value>false</Value>
    10. </DataNode>
    11. ...
    12. </Table>


    So lese ich die XML ein und iteriere durch alle DataNodes:

    VB.NET-Quellcode

    1. Private Sub OpenDataFile() Handles OpenFileDlg.FileOk
    2. Dim doc As New XmlDocument
    3. doc.Load(OpenFileDlg.FileName)
    4. Dim nodelist As XmlNodeList = doc.GetElementsByTagName("DataNode")
    5. For Each node As XmlElement In nodelist
    6. Debug.WriteLine(FindBindingIndex(node("ID").InnerText))
    7. Next
    8. End Sub


    Doch das funktioniert nicht! Es wird IMMER -1 ausgegeben! Ich habe mit dem Debugger in die Suchfunktion geschaut und weiß, dass der richtige String übergeben wird. Wie kann es sein, dass

    VB.NET-Quellcode

    1. FindBindingIndex("RTxBx_Vehicle_Description")


    und

    VB.NET-Quellcode

    1. FindBindingIndex(node("ID").InnerText) 'mit node("ID").InnerText= "RTxBx_Vehicle_Description"


    nicht den gleichen Rückgabewert ausspucken? Hat das vielleicht etwas mit dem Encoding der XML-Datei zu tun?

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

    Für XML gehört gescheites Serializing her! Wobei ich hier auch JSON sagen würde, ist einfach schneller und somit besser. Dann sollte das auch klappen.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Moin,

    also wie gesagt, rate immer noch zu JSON, ist einfach besser. Falls Du doch XML willst, dann schau Dir das mal an: msdn.microsoft.com/de-de/libra…serializer(v=vs.110).aspx

    Dabei wird einfach das ganze Zeugs in die XML geschrieben (serialisieren) und abgerufen (deserialisieren). Somit wäre es dann denkbar einfacher, das zu verwalten.
    Ansonsten mit JSON guggst Du System.Web.Script.Serializer.JavaScriptSerializer.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hallo Trade,

    ich habe mir jetzt mal in Ruhe deinen Link zum XMLSerializer angesehen und dann noch Tutorials auf DreamInCode und CodeProject durchgeschaut. Das Konzept ist mir jetzt einigermaßen klar - eine coole Möglichkeit Daten zu speichern/laden!

    Ich fürchte allerdings Overkill für mich (zumal ich wahnsinnig unter Zeitdruck stehe).

    Ich versuche eine Laden/Speichern Funktion zu realisieren. Ich habe jeweils Paare aus UserControl und einer zugehörigen Datenklasse, beide sind über DataBinding verbunden.
    Sowohl Usercontrol als auch Datenklasse hab zig Properties, die für Speichern/Laden keine Rolle spielen. Tatsächlich möchte ich jeweils nur den Namen des Usercontrols und eine bestimmte Property aus der zugehörigen Datenklasse speichern.

    Ich sehe das der XMLSerializer ein mächtiges Werkzeug ist, aber auch viel Kram mitbringt, den ich nicht brauche und der meine (sehr!) begrenzten Fähigkeiten überfordert. Ich habe einfach auch zu wenig Zeit mich mit dem Thema intensiver auseinander zu setzen. Ich müsste jetzt erst rausfinden, wie man aus dem Usercontrol und der Datenklasse jeweils nur einen Wert rausfischt und beide dann zusammen in ein Node stopft und dann später wieder zurückschreibt.

    Über den billigen XMLWriter/XMLReader habe ich mir ein einfaches Konzept erstellt das meine Ansprüche erstmal befriedigt. Das Auslesen der Daten und Schreiben in die XML funktioniert auch prima, aber es bleibt das im Eingangspost geschilderte Problem. Trotzdem Danke für deinen Vorschlag. Sobald etwas mehr Zeit ist, werde ich das Konzept mal angehen...

    Es bleibt also die Frage des Eingangsposts bestehen. Warum spuckt der XML-Reader einen String aus der nicht funktioniert?
    Hallo sonne,

    Das "IS" ist ein Copy&Paste Überbleibsel. Der Funktion FindBindingIndex ist mehrfach überladen und die anderen Varianten davon suchen nach Objekten, welche sich nur mit "IS" vergleichen lassen...

    Jetzt habe ich spaßeshalber mal "IS" durch "=" ersetzt:

    und ES FUNKTIONIERT!

    Du kannst dir nicht vorstellen, wie dankbar ich dir bin!!! Wirklich :)

    lg Christian