molily: Expat XML Pasrer cData bei Sonderzeichen Zeilenweise ?

Beitrag lesen

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&#228;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