Mailinglisten-Archive |
Hi @ll,
ich werde langsam verrückt dabei eine XML-Datei mit dem event-basierten
xmlparser auszulesen, obwohl ich mit dem simplexmlparser nie Probleme
hatte (allerdings will ich einen eventbasierten Parser verwenden um die
xml-Datei stückweise auszuwerten und so RAM sparen).
Und zwar fängt mein Problem etwas vereinfacht bei einer solchen
xml-Zeile an:
<bla>ö<abc</bla>
Das ö führt zu einem "Invalid character" und damit zum Abbruch des parsens.
Bei dem < gibt es zwar keinen Fehler, aber dafür ignoriert der Parser
dieses auch und alles was noch in dem selben xmltag dahinter steht.
Etwas Quelltext:
-----------
class xmlparser
{
var ...
var $xml_parser;
function xmlparser()
{
$this->xml_parser = xml_parser_create();
xml_parser_set_option($this->xml_parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($this->xml_parser,Array($this,"startElement"),Array($this,"endElement"));
xml_set_character_data_handler($this->xml_parser,
Array($this,"daten"));
}
function parseDatei($dateiname)
{
if (!($fp = fopen($dateiname, "r"))) die("XML-Datei konnte nicht
geöffnet werden");
while ($data = fread($fp, 4096)) if (!xml_parse($this->xml_parser,
$data, feof($fp))) die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($this->xml_parser)),
xml_get_current_line_number($this->xml_parser)));
xml_parser_free($this->xml_parser);
}
function parseString($xml)
{
if (!xml_parse($this->xml_parser,$xml,true)) die(sprintf("XML
error: %s at line %d",
xml_error_string(xml_get_error_code($this->xml_parser)),
xml_get_current_line_number($this->xml_parser)));
xml_parser_free($this->xml_parser);
}
...
}
$parser =new xmlparser();
$parser->parseString('<ab>ööö</ab>');
--------------------
Die startElement usw. Funktionen habe ich mal weggelassen. Soweit, dass
die interessant werden kommt es ja leider nicht :-(.
Was muss ich tun, damit ich Strings mit Sonderzeichen und <> auslesen
kann..?
php::bar PHP Wiki - Listenarchive