phpbar.de logo

Mailinglisten-Archive

[php] Sonderzeichen + xmlparser

[php] Sonderzeichen + xmlparser

yankee yannikh at gmail.com
Mon Sep 4 19:57:22 CEST 2006


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>ö&lt;abc</bla>

Das ö führt zu einem "Invalid character" und damit zum Abbruch des parsens.
Bei dem &lt; 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