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