2009-06-25 7 views
3

Ich habe Probleme beim Parsing von fehlerhaftem XML in PHP. Insbesondere frage ich einen Webservice von Drittanbietern ab, der Daten in einem XML-Format zurückgibt, ohne die XML-Entitäten in tatsächlichen Daten zu codieren. Zum Beispiel enthält eines der Elemente ein ASCII-Herz, '< 3', ohne die Anführungszeichen, die der XML-Parser als öffnendes Tag sieht. Es sollte "& lt; 3" sein.Lesen in fehlerhaftem XML (nicht codierte XML-Entitäten) mit PHP

Im Moment übergebe ich einfach die XML-Zeichenfolge in ein SimpleXMLElement, das vorhersagbar auf diesen Instanzen fehlschlägt. Ich habe mich etwas umgesehen und es scheint, als ob das PHP Tidy-Paket mir helfen könnte, aber die Anzahl der möglichen Konfigurationen ist überwältigend :(

Also frage ich mich nur, ob jemand anderes eine hat Problem wie dieses, und wenn ja, wie sie in der Lage, es zu lösen waren

Dank

Antwort

5

Versuchen tidy.repairString:.!.

php > $tidy = new tidy(); 
php > $repaired = $tidy->repairString("<foo>I <3 Philadelphia</foo>", array("input-xml"=>1)); 
php > print($repaired); 
<foo>I &lt;3 Philadelphia</foo> 
php > $el = new SimpleXMLElement($repaired); 
+0

Perfekt, danke :)! Ich fühle mich irgendwie albern, weil ich diese Konfigurationsoption jetzt nicht nur ausprobiert habe. – jszwedko

-1
  1. den Inhalt als String lesen
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. laden die transformierte Zeichenfolge in SimpleXMLElement

Es funktionierte für mich so weit.

+0

Das funktioniert nicht: neues SimpleXMLElement (htmlspecialchars (preg_replace ('/ [\ x- \ x8 \ xb- \ xc \ xe- \ x1f] /', '', " I <3 Philadelphia "))) ; Werde werfen, weil du zu schnell entkommen bist. –