phpbar.de logo

Mailinglisten-Archive

[php] XMLReader war: Grosse XML Dateien mit PHP 5 verarbeiten

[php] XMLReader war: Grosse XML Dateien mit PHP 5 verarbeiten

Ralf Eggert r.eggert at travello.de
Son Dez 4 17:07:10 CET 2005


Hallo nochmal,

irgendwie wirkt das mit XMLReader doch sehr umständlich.

Hier die vereinfachte XML Datei:

<?xml version="1.0" encoding="ISO-8859-1"?>
<list date="2005-11-25 05:31:37" language="de" num="12168">
  <p id="2">
    <name>Hans</name>
    <address>Gartenstrasse 17</address>
    <geoID>1</geoID>
    <country>Deutschland</country>
    <images>
      <image num="1">
        <imageURL>http://www.domain.de/img/hans.jpg</imageURL>
        <thumbURL>http://www.domain.de/img/hans_t.jpg</thumbURL>
        <title>Bild von Hans</title>
      </image>
    </images>
  </p>
  <p id="4">
    <name>Peter</name>
    <address>Parkstrasse 198</address>
    <geoID>2</geoID>
    <country>Schweiz</country>
    <images>
      <image num="1">
        <imageURL>http://www.domain.de/img/peter.jpg</imageURL>
        <thumbURL>http://www.domain.de/img/peter_t.jpg</thumbURL>
        <title>Bild von Hans</title>
      </image>
    </images>
  </p>
</list>

Und hier ein Auszug aus dem Skript, mit dem ich das Attribut "id" aus
dem "p"-Element sowie die Werte für "geoID" und "country" ausgeben möchte:

  while ($reader->read()) {
    switch ($reader->nodeType) {
      case (XMLREADER_ELEMENT):
        if ($reader->localName == 'p') {
          do {
            $id = $reader->getAttribute('id');

            do {
              $reader->read();
            }
            while ($reader->localName != 'geoID');

            $reader->read();
            $geoID = $reader->value;

            do {
              $reader->read();
            }
            while ($reader->localName != 'country');

            $reader->read();
            $country = $reader->value;

            echo $id.': geoID = '.$geoID.' > '.$country.'<br>';
          }
          while($reader->next('p'));
        }
    }
  }

Ist das der richtige Ansatz oder geht das auch einfacher?

Gruss,

Ralf

php::bar PHP Wiki   -   Listenarchive