Andreas: Einlesen von XML-Dateien

Hallo!

Habe folgendes Problem; vielleicht kann mir jemand von euch helfen:
Ich muss einzelne Daten aus XML-Dateien mit PHP einlesen. Dazu habe ich mir am Anfang ein eigenes Skript geschrieben, welches nur mit String-Funktionen arbeitet. Da es damit immer wieder zu Problemen kam, verwende ich seit einiger Zeit folgendes den PHP-XML-Parser nutzendes Skript:
----
function GetStartTag($parser, $element_name, $element_attribs) {
    global $tagstack;
    $tagstack .= "<" . $element_name . ">";
}
function GetData($parser, $data) {
    global $tagstack, $tagarray, $lasttag;
    if ($lasttag == $tagstack) $tagarray["$tagstack"] .= $data; else $tagarray["$tagstack"] = $data;
    $lasttag = $tagstack;
}
function GetEndTag($parser, $element_name) {
    global $tagstack;
    $x = "<" . $element_name . ">";
    if (strrchr($tagstack, $x) == $x) $tagstack = substr($tagstack, 0, strrpos($tagstack, $x));
    else {
        echo "Error: no corresponding start tag for end tag", htmlspecialchars($x), "<br><br>";
        exit;
    }
}
function XML_Einlesen($padfile) {
    $tagstack = "";
    $lasttag = "?";
    if (@fopen($padfile, "r") != false) {
        $fp_XML = @fopen($padfile, "r");
        $xml_parser = xml_parser_create();
        xml_set_element_handler($xml_parser, "GetStartTag", "GetEndTag");
        xml_set_character_data_handler($xml_parser, "GetData");
        while ($data = fread($fp_XML, 4096)) {
            if (!xml_parse($xml_parser, $data, feof($fp_XML))) break;
        }
        xml_parser_free($xml_parser);
        fclose($fp_XML);
    }
}
----
Mit den meisten XML-Dateien funktioniert dieses auch gut, jedoch kommt es auch damit bei vereinzelten Dateien zu Problemen. Beispielsweise beim Einlesen der Datei "http://groups.yahoo.com/group/analyseit/files/anit_v2.xml", bei der einfach nichts zurückgegeben wird, oder bei der Datei "http://www.visualcatalogues.com/vclm_padinfo/pad_file.xml", bei der die Fehlermeldung "php_hostconnect: connect failed" zurückgegeben wird. Beide Dateien sind jedoch mit dem Internet Explorer problemlos erreichbar und werden richtig dargestellt.

Wie gesagt: Das Skript arbeitet mit fast jeder Datei, aber ich verstehe nicht wo beispielsweise das Problem bei oben genannten XML-Dateien liegt. Sind die XML-Dateien fehlerhaft? Ich konnte keinen Fehler finden und der Parser des Internet Explorers stellt Sie auch ohne Probleme dar! Oder ist noch irgendein Fehler im oben genannten Skript?

Hoffe, ihr könnt mir helfen!

Herzlichen Dank bereits im Voraus

Andreas

  1. hallo,


    Mit den meisten XML-Dateien funktioniert dieses auch gut, jedoch kommt es auch damit bei vereinzelten Dateien zu Problemen. Beispielsweise beim Einlesen der Datei "http://groups.yahoo.com/group/analyseit/files/anit_v2.xml", bei der einfach nichts zurückgegeben wird,

    das ist eine katastrophe aber keine xml datei. die verlinkte datei kann man als quasi html betrachten, aber das auch nur mit größtem wohwollen. mit xml hat aber die datei absolut nichts zu tun. (sie kann nicht einmal eine automatisch generierte html seite sein, denn so eine müsste auch zumindest "wohlgeformt" sein.

    oder bei der Datei "http://www.visualcatalogues.com/vclm_padinfo/pad_file.xml", bei der die Fehlermeldung "php_hostconnect: connect failed" zurückgegeben wird. Beide Dateien sind jedoch mit dem Internet Explorer problemlos erreichbar und werden richtig dargestellt.

    dazu kann ich nichts sagen. die datei ist auf alle fälle wohlgeformte xml.

    Wie gesagt: Das Skript arbeitet mit fast jeder Datei, aber ich verstehe nicht wo beispielsweise das Problem bei oben genannten XML-Dateien liegt. Sind die XML-Dateien fehlerhaft? Ich konnte keinen Fehler finden und der Parser des Internet Explorers stellt Sie auch ohne Probleme dar! Oder ist noch irgendein Fehler im oben genannten Skript?

    vielleicht hat dein parser probleme mit unterstrichen in dateinamen?

    grüße
    thomas

    1. Hallo Thomas!

      Erst einmal danke für deine schnell Antwort!

      Mit den meisten XML-Dateien funktioniert dieses auch gut, jedoch kommt es auch damit bei vereinzelten Dateien zu Problemen. Beispielsweise beim Einlesen der Datei "http://groups.yahoo.com/group/analyseit/files/anit_v2.xml", bei der einfach nichts zurückgegeben wird,

      das ist eine katastrophe aber keine xml datei. die verlinkte datei kann man als quasi html betrachten, aber das auch nur mit größtem wohwollen. mit xml hat aber die datei absolut nichts zu tun. (sie kann nicht einmal eine automatisch generierte html seite sein, denn so eine müsste auch zumindest "wohlgeformt" sein.

      Mir ist zwar beim Durchsehen der Datei natürlich auch aufgefallen, dass sie etwas "außergewöhnlich" (um es mal freundlich auszudrücken) ist, aber die "Ordnung" der Datei sollte doch eigentlich egal sein solange die XML-Struktur eingehalten wird, oder?

      oder bei der Datei "http://www.visualcatalogues.com/vclm_padinfo/pad_file.xml", bei der die Fehlermeldung "php_hostconnect: connect failed" zurückgegeben wird. Beide Dateien sind jedoch mit dem Internet Explorer problemlos erreichbar und werden richtig dargestellt.

      dazu kann ich nichts sagen. die datei ist auf alle fälle wohlgeformte xml.

      Wie gesagt: Das Skript arbeitet mit fast jeder Datei, aber ich verstehe nicht wo beispielsweise das Problem bei oben genannten XML-Dateien liegt. Sind die XML-Dateien fehlerhaft? Ich konnte keinen Fehler finden und der Parser des Internet Explorers stellt Sie auch ohne Probleme dar! Oder ist noch irgendein Fehler im oben genannten Skript?

      vielleicht hat dein parser probleme mit unterstrichen in dateinamen?

      Daran kann es auch nicht liegen, da die Datei "http://www.ab-tools.de/PAD/test_test.xml" funktioniert...

      Hoffe auf weitere Hilfe. Besten Dank

      Andreas

      1. hallo Andreas,

        Erst einmal danke für deine schnell Antwort!

        tja... wenn sie geholfen hätte.

        Datei "http://groups.yahoo.com/group/analyseit/files/anit_v2.xml",

        Mir ist zwar beim Durchsehen der Datei natürlich auch aufgefallen, dass sie etwas "außergewöhnlich" (um es mal freundlich auszudrücken) ist, aber die "Ordnung" der Datei sollte doch eigentlich egal sein solange die XML-Struktur eingehalten wird, oder?

        welche xml struktur??

        -------- auszug -------------
        <HTML>
        <BODY  bgcolor="FFFFFF"       text="000000"
              >

        <table border=0 cellpadding=0 cellspacing=0 width=100%>

        <blockquote>
        <br>
        <br>

        </body>
        </html>
        --------------------------

        • fehlende xml-daklaration.
        • groß und kleinschreibung unterschiedlich beim start- und endtag.
        • attribute ohne anführungszeichen.
        • nicht geschlossene elemente und so falsche verschachtelung.

        vielleicht hat dein parser probleme mit unterstrichen in dateinamen?

        Daran kann es auch nicht liegen, da die Datei "http://www.ab-tools.de/PAD/test_test.xml" funktioniert...

        Hoffe auf weitere Hilfe. Besten Dank

        viellicht dauerst das parsen zu lange? und das gibt dann einen timeout.
        hast du sonst nichts bei "php_hostconnect: connect failed" bekommen??
        http://www.phpbuilder.com/mail/php-install/2001062/0024.php

        php ist nicht so mein ding, wirklich helfen kann ich dir also dabei nicht.

        grüße
        thomas

        1. hallo Andreas,

          Erst einmal danke für deine schnell Antwort!

          tja... wenn sie geholfen hätte.

          Datei "http://groups.yahoo.com/group/analyseit/files/anit_v2.xml",

          Mir ist zwar beim Durchsehen der Datei natürlich auch aufgefallen, dass sie etwas "außergewöhnlich" (um es mal freundlich auszudrücken) ist, aber die "Ordnung" der Datei sollte doch eigentlich egal sein solange die XML-Struktur eingehalten wird, oder?

          welche xml struktur??

          -------- auszug -------------
          <HTML>
          <BODY  bgcolor="FFFFFF"       text="000000"
                >

          <table border=0 cellpadding=0 cellspacing=0 width=100%>

          <blockquote>
          <br>
          <br>

          </body>
          </html>

          • fehlende xml-daklaration.
          • groß und kleinschreibung unterschiedlich beim start- und endtag.
          • attribute ohne anführungszeichen.
          • nicht geschlossene elemente und so falsche verschachtelung.

          Moment, also bei der Datei "http://groups.yahoo.com/group/analyseit/files/anit_v2.xml" bekomme ich folgenden Inhalt angezeigt:
          ----
          <?xml version="1.0" encoding="Windows-1252" ?>

          • <XML_DIZ_INFO>
          • <MASTER_PAD_VERSION_INFO>
              <MASTER_PAD_VERSION>1.15</MASTER_PAD_VERSION>
              <MASTER_PAD_INFO>Portable Application Description, or PAD for short, is a data set that is used by shareware authors to disseminate information to anyone interested in their software products. To find out more go to http://www.asp-shareware.org/pad</MASTER_PAD_INFO>
              </MASTER_PAD_VERSION_INFO>
          • <Company_Info>
            [...]
            ----
            Das ist doch eine XML-Struktur, oder?

          viellicht dauerst das parsen zu lange? und das gibt dann einen timeout.
          hast du sonst nichts bei "php_hostconnect: connect failed" bekommen??
          http://www.phpbuilder.com/mail/php-install/2001062/0024.php

          Hab' schon so ziemlich überall gesucht, aber keine Antwort zu diesem Problem gefunden...

          php ist nicht so mein ding, wirklich helfen kann ich dir also dabei nicht.

          Ich seh' schon: Perl wäre so das XML-Auslesen besser (wüsste nämlich auch ein wohl gut funktionierendes Perl-Skript dafür.
          Was du zufällig, ob es möglich ist nur für das Auslesen ein Perl-Skript zu verwenden und das Ergebnis (also wegen mir das Datenfeld mit den ganzen Tags) an ein PHP-Skript zu übergeben?

          Grüße und danke

          Andreas

          1. hallo Andreas,

            Moment, also bei der Datei "http://groups.yahoo.com/group/analyseit/files/anit_v2.xml" bekomme ich folgenden Inhalt angezeigt:

            <?xml version="1.0" encoding="Windows-1252" ?>

            [...]

            Das ist doch eine XML-Struktur, oder?

            stimmt.
            ich öffne normalerweise solche dateien gleich im editor, der akzeptiert logischerweise keine cookies, jetzt habe ich es im browser geöffnet und bekam die datei zu sehen. tja ... yahoo und seine cookies.

            Ich seh' schon: Perl wäre so das XML-Auslesen besser (wüsste nämlich auch ein wohl gut funktionierendes Perl-Skript dafür.
            Was du zufällig, ob es möglich ist nur für das Auslesen ein Perl-Skript zu verwenden und das Ergebnis (also wegen mir das Datenfeld mit den ganzen Tags) an ein PHP-Skript zu übergeben?

            weiss ich leider nicht, aber für die frage könntest du einen neuen thread eröffnen.

            grüße
            thomas

            1. Hallo Thomas!

              ich öffne normalerweise solche dateien gleich im editor, der akzeptiert logischerweise keine cookies, jetzt habe ich es im browser geöffnet und bekam die datei zu sehen. tja ... yahoo und seine cookies.

              Das wäre natürlich auch eine Möglichkeit warum das Skript die XML-Datei nicht mag...
              Na ja, bleibt nur noch die was das Problem bei der Datei "http://www.visualcatalogues.com/vclm_padinfo/pad_file.xml" ist...
              Übrigens: Am zu lange Parsen kann's auch nicht liegen. Ich bin das Skript jetzt nämlich einmal Schritt für Schritt durchgegangen und der Punkt wo er hängen bleibt ist wirklich das öffnen der Datei mit fopen (also noch lange vor dem eigentlichen Parsen)!

              Ich seh' schon: Perl wäre so das XML-Auslesen besser (wüsste nämlich auch ein wohl gut funktionierendes Perl-Skript dafür.
              Was du zufällig, ob es möglich ist nur für das Auslesen ein Perl-Skript zu verwenden und das Ergebnis (also wegen mir das Datenfeld mit den ganzen Tags) an ein PHP-Skript zu übergeben?

              weiss ich leider nicht, aber für die frage könntest du einen neuen thread eröffnen.

              Jup, mach' ich!

              Grüße

              Andreas