ebody: XML PHP Probleme mit HTML Zeichen

Hallo,

über eine API Abfrage erhalte ich eine XML Datei. Darin sind zum Teil Zeichen wie "&" enthalten. Die XML möchte ich mit PHP einlesen und weiter verarbeiten, dafür nutze ich simplexml_load_file

Starte ich das Script, erscheint eine Fehlermeldung aufgrund des "&".

Da ich viele Abfragen mache, sollte es automatisiert laufen. Datei händisch öffnen, suchen + ersetzen sollte nicht die Lösung sein. Was kann ich machen, um alle XML Daten die ich über die API erhalte auch einlesen zu können?

Beispiel XML Datei - siehe &

<verzeichnis>
     <titel>Wikipedia Städteverzeichnis</titel>
     <eintrag>
          <stichwort stadt="Genf" motto="Genf ist schön & toll"></stichwort>
          <eintragstext>Genf ist der Sitz von ...</eintragstext>
     </eintrag>
     <eintrag>
          ...
     </eintrag>
</verzeichnis>

Gruß ebody

  1. Tach!

    über eine API Abfrage erhalte ich eine XML Datei. Darin sind zum Teil Zeichen wie "&" enthalten.

    Das ist ein Fehler. Das & ist in XML ein Sonderzeichen und muss zwingend umgeschrieben werden. Im Gegensatz zu den HTML-Parsern sind die XML-Parser von Haus aus wesentlich strenger.

    Da ich viele Abfragen mache, sollte es automatisiert laufen. Datei händisch öffnen, suchen + ersetzen sollte nicht die Lösung sein. Was kann ich machen, um alle XML Daten die ich über die API erhalte auch einlesen zu können?

    Du solltest den Verursacher anschreiben, dass er valides XML produzieren soll. Anderenfalls kannst du nicht unterscheiden, wann ein & falsch ist und ersetzt werden muss und wann nicht. Du kannst lediglich generell davon ausgehen und hoffen, dass alles gut geht, dass eine gültige mit & beginnende Sequenz unangetastet bleiben soll und alle anderen & durch &amp; ersetzt werden sollen. Das muss man nicht händisch machen, das kann man den String- oder Regexp-Funktionen überlassen. Alternativ kannst du in der Dokumentation nachschauen, ob es einen Parameter gibt, der den XML-Parser großzügiger werden lässt.

    dedlfix.

    1. @@dedlfix

      Alternativ kannst du in der Dokumentation nachschauen, ob es einen Parameter gibt, der den XML-Parser großzügiger werden lässt.

      Ein XML-Parser DARF NICHT großzügiger sein.

      Unescapete & und < ergeben kein wohlgeformtes XML-Dokument. “Violations of well-formedness constraints are fatal errors.” Der XML-Prozessor darf bei einem fatalen Fehler die normale Verarbeitung der Daten gar nicht fortsetzen.

      Wenn ein Parser also großzügiger wäre, dann wäre es kein XML-Parser.

      LLAP 🖖

      --
      „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
      „Hat auf dem Forum herumgelungert …“
      (Wachen in Asterix 36: Der Papyrus des Cäsar)
    2. Danke an alle!

      Gruß ebody