Expat XML Pasrer cData bei Sonderzeichen Zeilenweise ?
Chrisi
- php
0 molily
Hallo zusammen,
ich habe mich die letzten 2 Tage mit dem XML Parser von PHP beschäftig und habe da eine allgemeine Frage zur Übergabe der cDaten.
Habe beobachtet das der Parser mir bei Sonderzeichen den String mit den cDaten zerlegt und er mir die Daten stückweise liefert, und ich diese wieder zusammenfügen muss.
Aber warum tut er das ? Ich verstehe den Sinn nicht, für mich wird dadurch nur das erkennen ob ich in einem neuen Tag oder noch immer im selben befinde unnötig schwierig.
Ist es vieleicht sogar möglich das abzustellen ?
Ich danke für jeden Tipp & Viele Grüße ...
Chrisi ...
Hallo,
Was verstehst du unter Sonderzeichen?
Sind diese Zeichen im XML-Dokument vielleicht als numerische Zeichenreferenzen notiert (z.B. ä)?
In dem Fall wüsste ich nicht, wie man verhindern kann, dass der Zeichendten-Handler mehrfach aufgerufen wird.
Aufeinanderfolgende Zeichendaten kannst du im Zeichendaten-Handler in einer globalen Variable zusammensetzen, im Start- und End-Tag-Handler dann benutzen (z.B. ausgeben oder woanders speichern) und zurücksetzen.
<?php
$data = '<root>abäcd</root>';
$character_data = null;
function startElement () {
global $character_data;
if ($character_data) {
echo($character_data . "\n");
$character_data = null;
}
}
function endElement () {
global $character_data;
if ($character_data) {
echo($character_data . "\n");
$character_data = null;
}
}
function characterData ($xml_parser, $string) {
global $character_data;
$character_data .= $string;
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, 'startElement', 'endElement');
xml_set_character_data_handler($xml_parser, 'characterData');
xml_parse($xml_parser, $data, true);
xml_parser_free($xml_parser);
?>
Mathias