Auslesen einer XML-Datei

  • Zitat von DarkSyranus

    Ja wie von welchem Datensatzt?

    Beispielsweise von dem. Das Ziel ist es, als Ausgabe die Rot markierte Zahl zu bekommen. Die und ausschliesslich die.

    Und ich verstehe nicht, ich genau den Datensatz ansteuern kann...

    Zitat

    <MesPar DH="HBCHa" StrNr="2135" Typ="03" Var="00">

    ... um dann daraus den Wert Typ "-24h" oder welchen auch immer holen kann. Und Grundsätzlich verstehe ich jetzt gar nichts mehr. Jetzt habe ich 100 Codeschnippsel und habe keine Ahnung mehr welcher wo hin gehört und.. ja eben. Ich schaue es mir nochmal an. Danke!

    Wie schafft ihr es nur alle, php zu programmieren? :? Darf ich mal kurz fragen seit wann du das machst?

    EDIT: Ich schaffs nicht. Kann mir jemand einen kompletten Beispielcode für irgendeinen der Datensätze posten? :roll:

  • Moin
    ja darfst du.
    PHP seit etwa 10 Monaten.
    Vernünftiges PHP seit etwa 8 Monaten, davor war das nur son komisches rumprobiere und nicht wirklich zu gebrauchen =)
    Ok, mal ganz langsam.


    Schau dir den Code an und nebenbei die Funktion preg_match() von php.net.
    Der Schnipsel ist jetzt nur zum Verständnis und hat mit den anderen Sachen nichts zu tun.
    Dann solltest du eigentlich was verstehen.

  • Cool danke :D

    Dann wäre ich einmal soweit:

    Das Ergebnis ist das:

    Zitat

    Warning: preg_match() expects parameter 2 to be string, array given in /home/www/web305/html/test.php on line 5

    Was sind da für parameter gemeint?

    EDIT:

    Den Teil will ich bekommen:

  • Zitat von php.net

    int preg_match ( string $Suchmuster, string $Zeichenkette [, array &$Treffer [, int $Flags [, int $Versatz]]] )


    Das erste ist das, was du suchst.
    Das zweite ist das, waorin du suchst.
    3, 4 und 5 sind optional, interessant ist für dich erstmal nur 3.
    Dort werden die Ergebnisse der Suche gespeichert.

    Mach in deinem zweiten preg_replace() aus $messungen ein $xml, da du ja die Werte aus der xml Datei haben willst, die wiederrum in der Variable $xml liegen.

  • Zitat von DarkSyranus

    Mach in deinem zweiten preg_replace() aus $messungen ein $xml

    preg_replace()? muss ich das einfügen oder meinst du preg_match()?

    Gesucht:

    Code:

    Ergebnis:

    Zitat

    Warning: preg_match(): Unknown modifier 'W' in /home/www/web305/html/test.php on line 5

  • :shock:

    http://www.wasserfahren.info/test.php

    Bitte sag mir nicht, dass ich jetzt eine geschlagene Woche und die Hilfe von 4 Personen gebraucht habe, um die 3 Zeilen Code zusammenzukriegen.. nein.. autsch.. aua.. das tut doch weh!

    Du bist jedenfalls mein Held und wenn du mal ein Alibi brauchst oder sonstwas dann sag mir bitte Bescheid. :danke2:

  • Der will doch nicht.. Obwohl ich die Daten der Messstelle Aare - Bern eingegeben habe, gibt er mir die Daten der ersten Messstelle aus der Liste aus. Kann es sein, dass die zweite Abfrage die erste wieder aufhebt?

    PHP
    <?php
    $xml = file_get_contents('http://www.hydrodaten.admin.ch/lhg/SMS.xml');
    preg_match('/<MesPar DH=\"HBCHa\" StrNr=\"2135\" Typ=\"03\" Var=\"00\">(.*?)<\/MesPar>/', $xml, $messungen);
    preg_match('/<Wert>(.*?)<\/Wert>/', $xml, $varm24);
    echo $varm24[0];
    ?>

    Hier der Datensatz:

  • Zitat

    Im ersten preg_machtspeichert du die Funde doch in der Variable $messungen.


    Genau. Deshalb bin ich am Anfang auch davon ausgegangen, dass ich im zweiten preg_match() mit der Variable $messungen weiterarbeiten muss.

    Zitat

    Also echo $messungen[0];


    Aber echo $messungen gibt die Daten doch aus? :? Ich muss sie ja "weiter filtern" oder verstehe ich das falsch? Beide Argumente bringe ich nicht in die selbe preg_match()

    Zitat

    preg_match('/<MesPar DH=\"HBCHa\" StrNr=\"2135\" Typ=\"03\" Var=\"00\">/<Wert>(.*?)<\/Wert>/<\/MesPar>/', $xml, $messungen);

    Ich sehe, mir fehlen die PHP Grundkenntnisse. :roll:

  • Ich glaube, wir schreiben an einander vorbei. Das XML-File enthält Datensätze von mehreren Hundert Messstationen. Hier jetzt zur Veranschaulichung die ersten drei:

    Aabach - Hitzkirch Nord
    Aabach - Hitzkirch Süd
    Aach - Salmsach

    Wenn ich mich nun folgenden PHP-Code ausführe...

    Zitat

    preg_match('/<Wert Typ=\"m24\">(.*?)<\/Wert>/', $xml, $varm24);

    ... liefert er mir als Ergebnis automatisch den "Wert Typ m24" vom ersten Datensatz, also den Wert m24 vom Datensatz Aabach - Hitzkirch Nord. Was tue ich aber, wenn ich beispielsweise den "Wert Typ m24" von Aabach - Hitzkirch Süd oder von Aach - Salmsach als Ergebnis will? Dann muss ich doch irgendwie zuerst nach Aabach Hitzkirch Nord (bzw. dessen übergeordneten Tag) und dann nach "Wert Typ m24" filtern?

  • Achso, so meinst du das.
    ja dann wird das ganze etwas komplizierter.
    Das kann man zwar allein mit preg_match machen, das ist aber Wahnsinn.
    Man musst eigentlich zumindest preg_split() oder split() mit nehmen, kommt immer auf das an, was man vorgegeben hat.

    So wies bei dir aussieht würde ich split("\n\n", $daten) nehmen, bin dafür jetzt aber zu müde.
    Schau dir die Funktion mal bei php.net an
    Evtl. geht auch preg_match_all().
    Ich würd aber lieber die split() Methode nehmen.

  • OK. Danke für deine Hilfe und sorry wegen dem drumrum reden :? Bin davon ausgegangen, dass du die XML-File angeschaut hast und habe deshalb immer nur den Teil kopiert um den es ging.. da war natürlich nie ersichtlich dass in der XML-File noch viel mehr ist..

    Schönen Abend noch


  • So, der Thread nervt mich!! So müssts jetzt gehn!

    Entweder die Daten gleich in der Schleife ausgeben oder in ein Array speichern...
    Falls Zeiteres gewünsch ist, mach ich es auch noch ;)

    Kommt halt drauf an, wo du die daten dann brauchst...


    lg Sebi

  • :shock:

    http://www.wasserfahren.info/test.php

    Bitte sag mir nicht, dass ich jetzt eine geschlagene Woche und die Hilfe von 4 Personen gebraucht habe, um die 3 Zeilen Code zusammenzukriegen.. nein.. autsch.. aua.. das tut doch weh!

    Du bist jedenfalls mein Held und wenn du mal ein Alibi brauchst oder sonstwas dann sag mir bitte Bescheid. :danke2:

    Hallo Leute,

    ich weiß, der Thread ist uralt. Aber trotzdem war der eine große Hilfe für mich.
    @ DarkSyranus
    Dein Post vom 14.04.2007, 21:10 war die größte Hilfe.

    @ Sojo
    Mir geht es jetzt wie dir damals. Nur das ich ein paar Stunden suchen und probieren mußte.
    Ich wollte ein paar Währungen (USD in EUR, JPY in EUR) immer tagesaktuell berechnen lassen und als Quelle dient die XML-Datei von der EZB.
    http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml

    Ein kurzer auszug aus der XML-Datei:

    Code
    <Cube time='2009-07-16'>
    <Cube currency='USD' rate='1.4130'/>
    <Cube currency='JPY' rate='132.63'/>
    <Cube currency='BGN' rate='1.9558'/>
    .....
    </Cube>

    Somit sieht der Code meiner Testpage so aus:

    So, jetzt werde ich den ganzen Spaß in eine Datei exportieren, die immer nur bei Bedarf aufgerufen wird, um einfach nur den Umrechnungsfaktor zu liefern (ein einziger Aufruf für die Seite).

    MfG, macbig2k1

    PS: verwendet wird's hier http://www.tw-parts.com