Daten einer XML-Ressource in Datatable einlesen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von SamuelCooper.

    Daten einer XML-Ressource in Datatable einlesen

    Hallo zusammen,

    ich bin noch neu hier im Forum und noch in den Anfängen der vb.net-Entwicklung (vorher nur VBA).

    Zu meiner Frage:
    Ich habe eine Datatable in einem Dataset. Die Daten, mit welchen die Datatable gefüllt werden soll, liegen in einer XML-Datei, welche ich als Ressource in die Projektmappe eingefügt habe.
    Nun möchte ich gerne die Daten aus der XML-Datei über einen Button_Click-Handler in die Datatable laden.

    Über

    VB.NET-Quellcode

    1. dim filepath as string = "filepath"
    2. dataset.datatable.readxml(filepath)


    kann ich die Daten einlesen. Das funzt soweit. Aber: Wenn ich das Programm irgendwann fertigstelle, sind die xmls als Ressoure eingebunden, jedoch kenne ich ja den Pfad der XMLs auf dem PC des Users nicht mehr. Daher müsste ich doch irgendwie über eine Art

    VB.NET-Quellcode

    1. my.resources.xmldatei
    auf die Resource zugreifen und diese dann in die Datatable schreiben können. Aber wie geht das?

    Mir fehlt da leider der Ansatz. Habe ich einen Denkfehler? Kann mir jemand weiterhelfen?

    Sollte es das Thema schon geben, dann freue ich mich auch über einen Link. Wenn das Thema am falschen Ort liegt, bitte einfach verschieben.

    Gruß,
    Samuel
    Hier ein Beispiel

    VB.NET-Quellcode

    1. Dim dsNew As New DataSet
    2. 'Ist nur zum Prüfen,ob die beiden Strings auch gleich sind
    3. If String.Equals(ds.GetXml, res) Then
    4. 'In ein neuses Dataset einlesen
    5. Using sr As New StringReader(res)
    6. dsNew.ReadXml(sr, XmlReadMode.InferSchema)
    7. 'usw ....
    8. End Using
    9. End If


    Edit: Sorry, hab den Teil auch noch hinzugefügt, wie man den String wieder in das Dataset kriegt siehe Code oben


    Freundliche Grüsse

    exc-jdbi
    Dateien
    • Basis.zip

      (15,2 kB, 126 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „exc-jdbi“ ()

    Vielen Dank für eure Antworten. Die haben mich aber irgendwie noch nicht weiter gebracht.
    Ich versuch mein Problem noch mal genauer zu beschreiben:

    Meine XML-Dateien existieren bereits. Ich habe die dann unter Visual Studio 2015 über Projekt->Eigenschaften->Ressourcen als "Datei" eingefügt. Die XML-Dateien werden mir nun in der Projektmappe auch angezeigt.
    Wenn ich das Programm jetzt starte, werden die XML-Dateien jedoch nicht in den "\bin\debug\"-Ordner geschrieben. Damit funzt

    VB.NET-Quellcode

    1. Application.StartUpPath & "\meineXml.xml"
    nicht.Ist ja auch klar, da die Datei da gar nicht hingeschrieben wird.
    @exc-jdbi: Vielen Dank für den ausführlichen Code. Ich bin da aber leider nicht so ganz durchgestiegen. Ich habe gesehen, dass deine xml-Datei in den "bin\debug\"-Ordner geschrieben wird, konnte aber nicht so ganz herausfinden warum. Wenn ich das recht verstanden habe, hast du die Datei per Code als Ressource eingefügt. Das würde ich gerne vermeiden, um nicht immer "aufwendig" für jede Ressource eine Function schreiben zu müssen, nur damit die einmalig in die Projektmappe als Ressource eingefügt ist.

    Also: Wie bekomme ich es hin, dass meine manuell eingefügten Ressourcen über Projekt->Eigenschaften->Ressourcen auch beim Kompilieren in den StartUpPath geschrieben werden? ?( ?(
    So, nach ein wenig grübeln und mit Hilfe folgender Anleitung (msdn.microsoft.com/de-de/library/bb979434.aspx) bin ich selbst auf die Lösung gekommen.

    Eine bestehende XML-Datei (geht auch mit anderen Dateien, welche man als Ressource einbetten möchte) wird in Visual Studio 2015 über das Menü Projekt->Vorhandenes Element hinzufügen in die Projektmappe integriert.
    Nun die eingefügte Datei anklicken. Im Eigenschaftenfenster nun den Buildvorgang auf "Eingebettete Ressource" stellen und die Eigenschaft "In Ausgabeverzeichnis kopieren" auf "Immer kopieren" oder auf "Kopieren, wenn neuer" stellen.
    Beim Buildvorgang werden nun die einzubettenden Dateien in den Buildordner geschrieben, sodass man darauf nun zugreifen kann.

    Um nun meine XML-Dateien in eine Datatable einzulesen, gehe ich wie folgt vor:

    VB.NET-Quellcode

    1. Private Sub BtnLesen_Click(sender As Object, e As EventArgs) Handles BtnLesen.Click
    2. ' Lesen geht nur nach dem bereits eine entsprechend formatierte XML Datei erzeugt und als Ressource eingebettet wurde.
    3. Dim filepath As String = Application.StartupPath & "\Datenbanken\XML-Dateien\MeineXML.xml" ' Meine XML-Dateien liegen in einem Unterordner da es sehr viele sind, also hier den entsprechenden Pfad zur Datei angeben.
    4. MeinDataset.MeineDatatable.ReadXml(filepath) ' Es wurde manuell vorher bereits ein Dataset mit einer Datatable erstellt, daher wird hier kein neues Dataset und Datatable erzeugt, sondern nur auf ein bestehendes zugegriffen.


    Dennoch vielen Dank für eure Hilfe und Hinweise. Ihr habt mir den ein oder anderen Denkanstoß gegeben.
    Hallo SamuelCooper

    Ich wollte dir noch eine flexible Lösung näher bringen. Das ist quasi eine weitere Variante mit dem Resource-Dateien gehandhabt werden können. So wie du es gemacht hast ist es wie du es schon selber beantwortet hast die eingebettete Variante.

    Beide haben Ihre Vorzüge, z.B. können mit meiner Variante alle Daten vercryptet werden. Anderseits geht man auf eine Datenbank oder dergleichen, so ist sicher die eingebettete Variante zu bevorzugen. Es kommt halt immer darauf an, was man nachher mit dem Dataset noch macht.

    Welche du schlussendlich wählst ist dir überlassen.

    Freundliche Grüsse

    exc-jdbi
    Dateien
    • basis2.zip

      (10,83 kB, 128 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „exc-jdbi“ ()

    Hi exc-jdbi,

    ja vielen Dank für deine Lösung. Ich bin durch deinen Code nicht ganz durchgestiegen. Schätz, da fehlt mir noch ein wenig das Verständnis.
    Ja ich wollte die Ressource einbetten. Die Datatable bzw. das DS ist meine statische Datenbank. Die Werte werden nie verändert (außer bei einem Programm-Update). Sie enthält Werte mit welchen später Berechnungen durchgeführt werden sollen.

    Viele Grüße, und vielen Dank für die wirklich tolle Hilfe.

    SamuelCooper