<-Zeichen in XML-Tags einbetten



  • Hallo,

    ich speichere die Eingabe einer Suchabfrage in einer XML-Datei.

    Das sieht folgendermaßen aus:

    <?xml version="1.0" encoding="iso-8859-1"?>
    ...
    <suche>
    <eingabe>Artikelpreis < 100</eingabe>
    <treffer>1</treffer>
    </suche>
    ...
    

    Nun interpretiert der PHP-Parser das '<' als Fehler (XML error: not well-formed (invalid token) at line 42680).

    Nach Suche im Forum habe ich ein Lösungsansatz gefunden: Das '<' durch < ersetzen und speichern. Jetzt bekomme ich zwar keine Fehlermeldung mehr, jedoch wird der Tag nach dem '<' als geschlossen angenommen.

    <?xml version="1.0" encoding="iso-8859-1"?>
    ...
    <suche>
    <eingabe>Artikelpreis &lt; 100</eingabe>
    <treffer>1</treffer>
    </suche>
    ...
    

    ergibt die ausgabe:

    Artikelpreis

    Jetzt weiß ich nicht mehr weiter, und finde auch keine Lösungen dafür.

    Kennt jemand dieses Problem und hat entsprechende Lösungen, oder habt ihr Ideen, was ich mal probieren könnte oder wonach ich noch suchen könnte?

    Bin dankbar für Antworten 🙂



  • Seltsam. Woran merkst Du, daß der Parser daß das Tag als geschlossen angenommen wird? Welchen Parser nimmst Du, SAX oder DOM?



  • Ich denke mir, dass es als geschlossen angenommen wird, weil es danach ohne Fehlermeldung oder sonstige Probleme mit dem nächsten Tag weiter geht!

    Ich weiß nicht wie der Parser heißt, ich erstelle ihn in meinem PHP-Script mit...

    $xml_parser = xml_parser_create();
    


  • Hätte man sich auch gleich denken können. Du schaust dir die Ausgabe deines PHP-Skripts als HTML-Ausgabe im Browser an, richtig? Und du hast dir den HTML-Code, den dein Skript produziert, nie angesehen, oder?



  • Doch, hab ich mir angeguckt 😉

    <table>
    <tr><td>Suchbegriff</td><td>Trefferanzahl</td></tr>
    <tr><td>Artikelpreis </td><td>1</td></tr>
    
    <tr><td>Artikelpreis </td><td>1</td></tr>
    </table>
    

    Bei öffnendem Tag soll PHP "<td>" bzw. "<tr><td>" schreiben, bei schließendem "</td>" bzw. "</td></tr>" schreiben!
    Wie man sieht tut es dies auch, nachdem es auf das "<" trifft 😞



  • mein XML-Parser versteht das korrekt... Ich benutze dafür intern DOMDocument und ne eigene Funktion Dom2Array und bekomme das hier raus...

    Array
    (
        [suche] => Array
            (
                [eingabe] => Artikelpreis < 100
                [treffer] => 1
            )
    
    )
    

    gibts hier zum Downloaden (ist php5):
    http://www.ricosonntag.de/Download/Get/?File=XML.php

    require_once "XML.php";
    
    $XML = new Request_XML();
    $XMLStr = '
    <suche>
    <eingabe>Artikelpreis &lt; 100</eingabe>
    <treffer>1</treffer>
    </suche>
    ';
    
    $Res = $XML->XML2Array($XMLStr);
    
    // Ausgabe (siehe oben)
    DebugPrint($Res);
    


  • Danke dir Sunday, aber ich hätte vielleicht erwähnen sollen, dass auf dem Server php4 installiert ist und es besser wäre, wenn es dafür eine Lösung gäbe...

    Zur Info: bei einem &-Zeichen bekomm ich denselben XML-Fehler, wenn ich es mit '&' versuche ist es dasselbe wie mit < -> der Tag wird geschlossen und es wird mit dem nächsten weiter gemacht... 😡



  • naja probiers halt mal aus, vlei klappts auch unter php4.



  • Klappt, danke für die Hilfe 🙂

    Ich weiß nicht warum es klappt, aber nachdem ich die XML-Datei in ein Array geballert habe ( per file()-Funktion) und dann mit implode() rumgefuchtelt habe gings dann ...


Log in to reply