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