phpbar.de logo

Mailinglisten-Archive

[php] expat

[php] expat

Martin Adler martin.adler at continum.net
Mit Mar 22 09:30:11 CET 2006


Hallo,

habe folgende schwierigkeiten mit den PHP Expat Parserfunktionen.

Zum einen scheint  die Parseroption *XML_OPTION_SKIP_WHITE* unter
Verwendung von ElementHandler Callbackfunktionen keine Auswirkung zu
haben. Dies scheint nur für *xml_parse_into_struct()* zu gelten.
Um CData Daten bestehend aus White Spaces zu vermeiden, Prüfe ich mit
folgendem Ausdruck:
if(!preg_match('/^[\t \n\r]+$/',$data)) {
	$var .= $data
}
Gibt es eine bessere Möglichkeit als einen Regulären Ausdruck hierfür?


Ein weiteres Problem ist, dass sich die Funktion
*xml_set_character_data_handler()* sich nicht ganz so verhält wie ich es
mir erwartet hatte bzw. ich nicht ganz verstehe wieso die Funktion sich
so verhält.
So trifft der Parser z.B. auf Umlaute, so wird der Vorgang abgebrochen
und anschließend erneut aufgerufen.

Beispiel:
<title>Ein Text über etwas</title>
Hier wird der zuerst der Text bis zum *ü* geparsed und danach der Rest.
function cData($parser, $data) {
	echo "|".$data."|\n";
}
Somit erzeugt der dieser Callback Handler folgende Ausgabe
|Ein Text |
|über etwas|

Dies macht es z.B. nicht möglich ein trim bereits in der Callback
Funktion zu verwenden, da sonst das Leerzeichen zwischen "Test" und
"über" fehlen würde.


Sind beide verhalten Bugs oder Absichtlich implementiert. Bei letzerem
wurde mich auch der Zweck interessieren.

vielen Dank und Grüße
Martin Adler


php::bar PHP Wiki   -   Listenarchive