phpbar.de logo

Mailinglisten-Archive

[php] expat

[php] expat

Peter Bieling network at media-palette.de
Mit Mar 22 18:48:30 CET 2006


Hallo Martin,

Martin Adler wrote:

> 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.

Da könntest Du recht haben.

> 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?

z.B. $var .= trim($data);

> 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.

Meinst Du, dass die Umlaute rausfallen?
Wie sieht denn Deine XML-Deklaration aus?
Verwendest Du PHP4 oder 5?

> 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.

Also, die Character-Data kommen in kleinen Portionen, die musst Du 
selbst verketten und anschließend trimmen.

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

Aus meiner Sicht, ist bei Verwendung der "Expat"-Funktionen noch sehr 
viel Handarbeit gefragt[1]. Der XML-Code wird nun einmal zeilen- und 
zeichenweise durchlaufen, und bei jedem "Event" gibt es eine 
entsprechende Rückgabe des Parsers. Umlaute stellen natürlich ebenfalls 
eine Besonderheit dar. Sie werden ja erst durch die Angabe der Codierung 
zugelässig, und der Parser kommt offenbar ins Stocken. ;-)

Vielleicht sagst Du uns noch, was Du mit den Expat-Funktionen vorhast? 
Für XML gibt es nämlich abhängig vom Zweck noch diverse andere 
Möglichkeiten, besonders natürlich mit PHP5.

[1] Um den Umgang mit den Parserfunktionen zu erleichtern, habe ich 
schon vor einiger Zeit diese Allround-Klasse geschrieben:
http://www.media-palette.de/tools/xml-line/
Vielleicht ist das auch etwas für Dich. Zumindest könntest Du Dir 
vielleicht aus dem Quelltext Anregungen für Deine Aufgabenstellung holen.

Viele Grüße

Peter




php::bar PHP Wiki   -   Listenarchive