Variablen aus geparster XML-Datei

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variablen aus geparster XML-Datei

    Hallo, ich schlage mich gerade mit einem sehr merkwürdigen Problem herum. Aufgabe ist es, eine XML-Datei zu parsen und dann die daraus gewonnenen Werte in PHP-Variablen zu speichern und an verschiedener Stelle wieder auszugeben.

    Das Parsen klappt wunderbar. Ich erhalte meine Werte und kann sie ganz unkompliziert weiterverarbeiten. Nun wird die XML-Datei (die ich übrigens von einer externen Quelle beziehe) ca. 4x wöchtentlich aktualisiert. Nach einer solchen Aktualisierung bekomme ich im PHP-Skript seltsamerweise einige der Variablen mit Werten ausgegeben, die aus der XML-Datei vor der Aktualisierung stammen.

    Also, vor der Aktualisierung sieht es etwa so aus:

    $var1 = wert1_alt;
    $var2 = wert2_alt;
    $var3 = wert3_alt;

    Und nach der Aktualisierung:

    $var1 = wert1_neu;
    $var2 = wert2_neu;
    $var3 = wert3_alt;

    Welcher mysteriöse Cache merkt sich scheinbar willkürlich ein paar alte Werte, obwohl eindeutig die Mehrzahl der Variablen mit den neuen Werten bestückt wird.

    Für hilfreiche Beiträge bedankt sich ciud, der PHP-Newbie.

  • #2
    Hi cuid,

    willkommen in der php-community.

    Poste mal den Code für die Aktualisierung.
    Yuppi, endlich Elite ...

    Comment


    • #3
      Danke für den netten Empfang!

      In die original XML-Datei kann ich keinen Einblick gewähren, da es sich um Kundendaten handelt. Mein Skript lautet auszugsweise:

      // Pfad zur XML
      $file = "http://www.domain.de/file.xml";

      // XML-Knoten, die ausgelesen werden sollen
      $map_tag = array("knoten1" => " ","knoten2" => " ","knoten3" => " ");

      // der Parser (die Funktionen "endTag" und "data" sind nicht relevant)
      $xp = xml_parser_create();
      xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
      xml_set_element_handler($xp, "startTag", "endTag");
      xml_set_character_data_handler($xp, "data");
      $fp = fopen($file, "r") or die("could not open XML input");
      while ($data = fread($fp, 4096)) {
      if (!xml_parse($xp, $data, feof($fp))) {
      die(sprintf("XML error: %s at line %d",
      xml_error_string(xml_get_error_code($xp)),
      xml_get_current_line_number($xp)));
      }
      }
      fclose($fp);
      xml_parser_free($xp);

      // die Funktion zum Auslesen der Werte und Schreiben der Variablen
      function startTag($parser, $name, $attrs)
      {
      global $map_tag;
      if ($map_tag[$name])
      {
      $wert = array_values($attrs);
      $schluessel = array_keys($attrs);
      for ($i=0;$i<count($wert);$i++)
      {
      $temp = $name."_".$schluessel[$i];
      global $$temp;
      $$temp = $wert[$i];
      echo $$temp;
      }
      }
      }

      Comment


      • #4
        Mhmm - Chaosprogramming!

        fehlt die Endtag funktion.

        global $$temp; ...argl...
        hat das was mit deiner $temp Variabel zu tun ??

        poste mal die Ausgabe-Routine ...

        Welche PHP Version verwendest Du?
        Yuppi, endlich Elite ...

        Comment

        Working...
        X