Anzeige:
Ergebnis 1 bis 5 von 5

Thema: xml_parse(): Umlaute, <>...

  1. #1
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41

    xml_parse(): Umlaute, <>...

    Hi @ll,

    ich verwende seit einiger Zeit den simplexml-parser von php.
    Allerdings steige ich gerade mit einem Script auf den etas komplexeren php-xml-parser um.
    Leider stelle ich fest, dass Umlaute und spitze Klammern nicht so funktionieren, wie ich es vom simplexml-parser kenne:
    <bla>ö&lt;abc</bla>
    wird im simplexml-Parser zu "ö<abc". Genau was ich will.
    Aber der standardxml-parser kommt bei umlauten mit einem "Invalid character"-Fehler.
    Bei dem &lt; macht der Parser zwar keinen Fehler, aber er parst es auch nicht und auch nichts, was dahinter steht.
    Also aus
    <bla>abc&lt;def</bla>
    Wird "abc". Das &lt;def ist einfach futsch...

    Woran liegt das...?

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hallo yankee42,

    um solche Fehler zu vermeiden kannst du Character-Data-Bereiche (CDATA) definieren. In diesen Bereichen kann dann jedes beliebige Zeichen stehen.

    Hier findest du ein Beispiel wie das eingebunden werden kann:
    http://www.w3schools.com/xml/xml_cdata.asp

    Zum Auslesen und Speichern von XML kann ich dir das XML_Serializer bzw. das XML_Unserializer Paket von PEAR nur wärmstens empfehlen:
    http://pear.php.net/package/XML_Serializer

    Es macht die Arbeit mit XML wirklich zum Kinderspiel. Mit der Dokumentation und den Code-Beispielen die bei dem Download dabei sind, ist auch die Anbindung an eigene Scripte sehr einfach.

    Grüße,
    nEox

  3. #3
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41
    Ich bekomme die xml-Daten von einem externen programm an php Übergeben. Daher wird mir das serialissieren von Objekten usw. wahrscheinlich nicht so viel weiterhelfen...

    die CDATA-Lösung gefällt mir eigentlich auch nicht so, denn dadurch würde meine xml-Datei ca. 20% grösser werden :-(. Meistens ist der Text, denn ein XML-Element enthält schon kürzer als <![CDATA[.

    Ausserdem: Was soll ich machen, wenn mal ]]> im text vorkommt? Das ist nämlich nicht zwangsweise so abwegig.
    Und nach der Spezifikation ist es ja auch vollkommen richtig <bla>ö&lt;ab</bla> zu schreiben. Dann muss es eigentlich auch eien Möglichkeit geben das nach dieser Spezifikation zu parsen...

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hallo yankee42,

    warum das so nciht geparst werden kann kann ich dir nicht sagen. Evtl. kennt der PHP Parser die Entitäten nicht.

    ...Daher wird mir das serialissieren von Objekten usw. wahrscheinlich nicht so viel weiterhelfen...
    XML_Unserializer nimmt einfach die XML-Daten und baut daraus ein Array - und das mit einer Codezeile. Damit wird das XML-Handling vereinfacht.

    ...die CDATA-Lösung gefällt mir eigentlich auch nicht so, denn dadurch würde meine xml-Datei ca. 20% grösser werden :-(. Meistens ist der Text, denn ein XML-Element enthält schon kürzer als <![CDATA[.
    Die CDATA-Bereiche würde ich auch nur bei Tags anwenden in dem beliebige Daten vorkommen können (z. B. <message>...</message>). "]]>" darf nicht im Text vorhanden sein, dass ist richtig.

    Grüße,
    nEox

  5. #5
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41
    Zitat Zitat von nEox Beitrag anzeigen
    XML_Unserializer nimmt einfach die XML-Daten und baut daraus ein Array - und das mit einer Codezeile. Damit wird das XML-Handling vereinfacht.
    Da macht php's simplexml-parser aber auch nichts anderes. Und von dem will ich unter anderem aus diesem Grund wegkommen. Denn die xml-Dateien, die ich auswerte sind manchmal verdammt gross und sprengen das memorylimit, wenn ich die nicht stückweise parse...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •