Mailinglisten-Archive |
> wo hast Du die Entities definiert? Wenn Du eine externe DTD > verwendest, > könnte es sein, dass das gar nicht geht. > Meine eigene Parserklasse - XML-Line- sollte die Entities richtig > einsetzten, sobald die DTD innerhalb des XML-Dokuments erfolgt. > Eigentlich sollte das mit der PEAR-Klasse ebenfalls gehen, > wenn Du die > Ausgabe der entsprechenden Handler in einem Buffer speicherst > und diesen > hinterher ausgibst. ok.. sag ich es mal anders: class parser extends XML_Parser { var $cdata_stack = array(); function parser($xml) { $this->folding = false; parent::XML_Parser(); $r = $this->parseString($xml) if (PEAR::isError($r)) die("parsing failed: ".$r->toString()); } function startHandler($xp,$tag,$attr) { $this->cdata_stack[] = ""; } function endHandler($xp,$tag) { $data = array_pop($this->cdata_stack); } function cDataHandler($xp,$data) { $this->cdata[count($this->cdata)-1] .= $data; } function defaultHandler($xp,$data) { $this->cDataHandler($xp,$data); } } das xml dokument ist ein xhtml dokument und komplett valide (html und xml valide!). nun habe ich folgendes: <!DOCTYPE html ...> <?xml version="1.0" ?> <html> <head> <title>title</title> </head> <body> <img src="xxx" title="schöner text" /> </body> </html> das eigentlich parsen ist kein problem... das img tag enthaelt ein title attribut. dieses attribut enthaelt ein entity ö. im startHandler() bekomme ich dann fuer das img tag folgendes: $tag == 'img' $attr['src'] == 'xxx' $attr['title'] == 'schner text' ... der defaultHandler() bekommt auf jeden fall VOR/NACH (nicht genau geprueft) dem aufruf von startHandler() das ö in $data. damit sind die informationen komplett zerstoert... :( gruss thomas
php::bar PHP Wiki - Listenarchive