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