C# - XML von PHP Generiert in Listview ausgeben

  • C#

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von nb1999.

    C# - XML von PHP Generiert in Listview ausgeben

    Hallo Liebe Community,

    Seit einigen Stunden stehe ich vor dem Problem, wie ich die von PHP Generierten XML Daten in C# in einem Listview ausgeben soll.

    Beispiel:

    Spoiler anzeigen

    PHP-Quellcode

    1. <?
    2. echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
    3. echo "<Urlaubsantrag>";
    4. ?>
    5. <Benutzer>Max Mustermann</Benutzer>
    6. <VonDatum>07.08.2015</VonDatum>
    7. <BisDatum>14.08.2015</BisDatum>
    8. <Status>Genehmigt</Status>
    9. <?php
    10. echo "</Urlaubsantrag>";
    11. ?>



    Wie bekomme ich diese XML Daten nun in ein C#-Listview ? :)
    Vielen Dank.
    Kannst Du

    nb1999 schrieb:

    diese XML
    mit einem standard XML-Viewer anzeigen lassen?
    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 ich versteh ja nix von php, aber könnte mir vorstellen, dass folgendes Xml bei rauskommt:

    XML-Quellcode

    1. <Urlaubsantrag>
    2. <Benutzer>Max Mustermann</Benutzer>
    3. <VonDatum>07.08.2015</VonDatum>
    4. <BisDatum>14.08.2015</BisDatum>
    5. <Status>Genehmigt</Status>
    6. </Urlaubsantrag>
    Sowas ist wohl klassischer Fall eines Datensatzes, daher würde ich von Listview gleich mal abraten, und Datagridview empfehlen, gebunden an ein durchdachtes typisiertes Dataset, was dann evtl. auch gleich das komplette Datenmodell der Anwendung abdecken könnte.

    ErfinderDesRades schrieb:

    also ich versteh ja nix von php, aber könnte mir vorstellen, dass folgendes Xml bei rauskommt:

    XML-Quellcode

    1. <Urlaubsantrag>
    2. <Benutzer>Max Mustermann</Benutzer>
    3. <VonDatum>07.08.2015</VonDatum>
    4. <BisDatum>14.08.2015</BisDatum>
    5. <Status>Genehmigt</Status>
    6. </Urlaubsantrag>
    Sowas ist wohl klassischer Fall eines Datensatzes, daher würde ich von Listview gleich mal abraten, und Datagridview empfehlen, gebunden an ein durchdachtes typisiertes Dataset, was dann evtl. auch gleich das komplette Datenmodell der Anwendung abdecken könnte.


    Ganz genau, ursprünglich wollte ich Daten aus einer MySQL Datenbank per Webclient auslesen. Dabei bekomme ich es allerdings nur hin, ein Wort in PHP per echo auszugeben, und z.B. in ein Label zu schreiben. Aber was ist, wenn ich mehrere Daten bsp. für Comboboxen,Listviews, etc. auslesen möchte. In PHP kann man ja mit einer schicken schleife arbeiten, doch wie verarbeite ich mehrere Daten in C#

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

    Dann denkst du schonmal falsch.
    Daten liest man nicht für Comboboxen und Listviews aus, sondern Daten liest man ins Datenmodell ein.
    Daran, ans Datenmodell, kann man dann binden, alles mögliche kannman sogar anbinden: Comboboxen, Textboxen, Labels, Checkboxen, DataGridviews - nur ListViews nicht - daher: DatagridView.

    Also mit mir kommst du nur weiter, wenn du deine Denke wegkriegst von irgendwelchen Controls, und anfängst, über Datenmodellierung nachzudenken.

    Ein einfaches Beispiel kannst du hier angugge: Daten laden und speichern
    Es passt leider nur teilweise auf deinen Fall, denn du willst ja garnix abspeichern - bzw. über php wird das komplizierter, und weiß ich nicht wie geht.
    Aber ein Datenmodell, und Databinding daran brauchst du dennoch, und das kannste da ansatzweise bisserl angugge.
    Hallo,

    Ich habe mich nach ein paar Tagen nochmals mit diesem Problem befasst, kann derzeit aber nur XML aus einer Datei in ein DataGridview schreiben. Wie würde dies nun konkret in Code aussehen wenn ich eine string variable mit dem XML code in c# in dieses Datagridview bekommen möchte ?

    C#-Quellcode

    1. string path = "D:\\xml-test.xml";
    2. DataSet ds = new DataSet();
    3. ds.ReadXml(path);
    4. dataGridView1.DataSource = ds;
    5. dataGridView1.DataMember = "table1";



    nb1999 schrieb:

    kann derzeit aber nur XML aus einer Datei in ein DataGridview schreiben.
    Du hast es immer noch nicht begriffen: Du schreibst die Datei nicht ins DatagridView, sondern du liest die Datei in ein Dataset ein.
    Also dein Code zeigt richtige ansätze (ein Dataset wird befüllt), aber deine Aussage dazu ist völlig falsch.

    Hast du eiglich mal das verlinkte Tutorial angeguckt? Da gehts um typisierte Datasets, und du befüllst hier prompt ein untypisiertes.

    Du kannst dir auch mal im ObjectBrowser die Dataset-Klasse genauer angucken, da gibts nämlich auch Methoden, die können Xml-Code als String laden.

    Kennst du den ObjectBrower? Visual Studio - Empfohlene Einstellungen
    (ja, ich könnte auch einfach vorsagen, aber den OB kennenzulernen bringt dich sicher weiter als hundertmal was vorsagen)

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

    Ich habe nochmals alle Verlinkungen durchgearbeitet, sowie auf MSDN nachgeforscht, komme aber immer noch zu keinem wirklichen Ergebnis.

    Ich kann einen XML string zwar Parsen, und auch zum Test in einer Messagebox ausgeben, doch ich bekomme es noch immer nicht in ein DataGridView. Im Internet finden sich zig tausende Beispiele wie man XML aus einer Datei verarbeitet, aber aus einer ganz normalen Variable, Fehlanzeige.

    Mein Ziel ist es später per Webclient einen PHP bzw. XML string auszulesen, und diesen dann zu Parsen bzw. in ein DataGridView zu bekommen.

    nb1999 schrieb:

    Ich habe nochmals alle Verlinkungen durchgearbeitet, sowie auf MSDN nachgeforscht, komme aber immer noch zu keinem wirklichen Ergebnis.
    na, dann muss ich wohl doch vorsagen:

    C#-Quellcode

    1. Stream strmXml =(WebResponse.GetResponseStream());
    2. DataSet ds = new DataSet();
    3. ds.ReadXml(strmXml);
    4. dataGridView1.DataSource = ds;
    5. dataGridView1.DataMember = "table1";

    Solange dein Php nicht geht, kannst du ersatzweise auch aus einem String laden:

    C#-Quellcode

    1. string sXml ="... <XmlCode> ....";
    2. DataSet ds = new DataSet();
    3. ds.ReadXml(new System.Text.StringReader(sXml));
    4. dataGridView1.DataSource = ds;
    5. dataGridView1.DataMember = "table1";
    (oder halt eben doch aus einer Datei - das weißt du ja bereits, wie das geht)

    Nur von solchen Geschichten würde ich sehr abraten:
    DataSet ds = new DataSet();
    man sollte nicht bei jedem Daten-Abruf neue Datasetse erstellen. Stattdessen sollte man genau ein Dataset erstellen, und zwar ein typisiertes Dataset.
    Hat man ein solches vorliegen, kann man unerhört elegant die Oberfläche designen, und mittels Databinding dann eine Verbindung zum Dataset konfigurieren - alles im Form-Designer.

    Also man erstellt und bindet genau einmal, und das macht man auf unerhört elegante Weise im Form-Designer - kein Code ist dafür zu schreiben.
    Und statt immer neue Datasetse ranzuschaffen, und immer erneut zu binden (per Code), leert und neu-befüllt man einfach diejenigen DataTables, die man bereits hat - in seinem typisierten Dataset :)


    guggemol vier Views-Videos

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

    Hallo,

    @ErfinderDesRades Vielen Dank für deine Antwort, das hat mich schon ein großes Stück weitergebracht. Allerdings erhalte ich folgende Error-Meldung:

    C#-Quellcode

    1. ​Severity Code Description Project File Line
    2. Error CS0234 The type or namespace name 'StringReader' does not exist in the namespace 'System.Text' (are you missing an assembly reference?) xml-test C:\Users\Nico\Documents\Visual Studio 2015\Projects\xml-test\xml-test\Form1.cs 31


    Lese ich es richtig, und er möchte noch einen Verweis in der Assembly ?
    Das ist der Konstruktor.
    Es gibt aber auch die gleichnamige Klasse (bei c# heissen Konstruktoren ja immer wie die Klasse), und da steht aber auch der vollqualifizierte Name der Klasse, also inklusive des Namespaces, wo die Klasse angesiedelt ist.
    Ich hatte aussm Kopf angenommen, es sei System.Text - war ein Irrtum meinerseits.

    Versuch es selbst zu lösen - einfach hingucken - ist immer besser als Vorsagen.
    probiers aus :)

    Ansonsten scheinst du mir noch bischen Begriffs-Unsicher, also was ein Konstruktor ist, eine Klasse, ein Namespace, ein vollqualifizierter Name und so Sachen.
    Diese Begriffe solltest du dir klar-machen, zur Not auch richtig recherchieren, weil dann kannst du den ObjectBrowser gleich viel besser "lesen", denn da sieht man eiglich sofort, welcher Suche-Treffer eine Klasse ist, und welcher ein Konstruktor, oder noch was anderes.

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

    ;(
    echt - nochmal vorsagen?

    C#-Quellcode

    1. string sXml ="... <XmlCode> ....";
    2. DataSet ds = new DataSet();
    3. ds.ReadXml(new System.IO.StringReader(sXml));
    4. dataGridView1.DataSource = ds;
    5. dataGridView1.DataMember = "table1";
    Also wenn du da nicht drauf kommen konntest, dann ist dir offenbar die Syntax von c# insgesamt nicht bekannt.
    Da schnapp dir ein gutes Buch, und eigne dir das an - auf Entwickler-Ressourcen und Tools, Bücher und WebCasts finden sich glaub auch gute c#-Bücher für umsonst.
    War sehr nah dran, habe aber warum auch immer das new vor System.IO ... vergessen. Danke nochmal für deine Geduld.

    Nochmal der Komplette Code, falls nochmal jemand das selbe Problem hat:

    C#-Quellcode

    1. string sXml = "<table1> <Benutzer>Max Mustermann</Benutzer> <VonDatum>07.08.2015</VonDatum> <BisDatum>14.08.2015</BisDatum> <Status>Genehmigt</Status> </table1>";
    2. DataSet ds = new DataSet();
    3. ds.ReadXml(new System.IO.StringReader(sXml));
    4. dataGridView1.DataSource = ds;
    5. dataGridView1.DataMember = "table1";

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