Andreas Lindig: /XML - nur einen Teil eines Dokuments parsen

Beitrag lesen

guten Tag geneigtes Forum,

ich parse ein Dokument mit dem SAX-Parser Expat in PHP. Gut, jetzt will ich nur Elemente mit bestimmter ID einlesen, aber wie?

Beispiel:

<quotings>
    <quote id="1">
        <category id="c1 c2 c3"/>
        ...
    </quote>
    <quote id="2">
        <category id="c4 c5"/>
        ...
    </quote>
    <quote id="3">
        <category id="c3 c5 c6"/>
        ...
    </quote>
</quotings>

jetzt will ich z.B. nur die Elemente 1 und 3 einlesen, weil sie die category "c3" enthalten, denn ich will alle Einträge mit der category "3" ausgeben, sonst nichts.

Jetzt soll ja der Vorteil eines SAX-Parsers gerade eben sein, daß man nicht das ganze (evtl. riesige) Dokument in den Speicher liest.

Wie geht man da praktisch vor? Ich rufe ja z.B. diese Funktion auf:

// Handler fuer Elemente ( oeffnende / schliessende Tags ) setzen
xml_set_element_handler( $parser, "start_element", "end_element" );

und frühestens in der aufgerufenen Funktion "start_element" kann ich feststellen, ob ich im Element "category" bin und ob dieses im Attribut "id" den Wert "c3" stehen hat. Bis hierhin ist aber das Oberelement "quote" schon eingelesen worden. Jetzt müsste ich doch den Vorgang bis zum vorigen "</qutoe>" wieder rückgängig machen. Oder ich lese das ganze Element komplett ein und lösche es wieder, wenn es nicht die richtige id enthält. Aber ist das denn nicht perfomancelastig? Da wird ja schon wieder das ganze Dokument geparst.

Ach ja: wenn ich z.B. 10 Elemente mit der id "c3" eingelesen habe, soll auch Schluß sein mit lustig - auch wenn das Dokument z.B. 1000 Datensätze hat. Wie stoppe ich denn den Parservorgang?

Gruß, Andreas

--
SELFFORUM - hier werden Sie geholfen,
auch in Fragen zu richtiges Deutsch