Heinrich: Parser

Hi,

Ich möchte mit PHP-Parser folgende Zeichenkette parsen: "<TEST>A&B&C</TEST>".

Also mache ich wie folgt:

$xmlPar = xml_parser_create();
xml_set_element_handler($xmlPar, "fStart", "fEnd");
xml_set_character_data_handler($xmlPar, "fData");
xml_parse($xmlPar, "<TEST>A&B&C</TEST>");
xml_parser_free($xmlPar);

als Ergebniss bekomme ich: TEST = "A" und wird ein Fehler angezeigt

falls als zwiete Parameter von xml_parse die Zeichenkette "<TEST>A&amp;B&amp;C</TEST>" angegeben wird
als Ergbebniss wird TEST = "C" zurückgegeben.

Hat jemand eine Idee, was machen, um TEST = "A&B&C" bekommen ?

Heinrich

  1. echo $begrüßung;

    Ich möchte mit PHP-Parser folgende Zeichenkette parsen: "<TEST>A&B&C</TEST>".
    $xmlPar = xml_parser_create();
    xml_set_element_handler($xmlPar, "fStart", "fEnd");
    xml_set_character_data_handler($xmlPar, "fData");
    xml_parse($xmlPar, "<TEST>A&B&C</TEST>");
    xml_parser_free($xmlPar);
    als Ergebniss bekomme ich: TEST = "A" und wird ein Fehler angezeigt

    Logisch, denn & muss als &amp; (oder &#38; oder &#x26;) notiert werden, sonst ist das XML ungültig.

    falls als zwiete Parameter von xml_parse die Zeichenkette "<TEST>A&amp;B&amp;C</TEST>" angegeben wird als Ergbebniss wird TEST = "C" zurückgegeben.

    Der Fehler muss in der Logik deiner Handler liegen. Der character_data_handler wird insgesamt 5 mal aufgerufen, für jeden Text-Block (bei dir nur jeweils ein Buchstabe) und für jedes Entity extra.

    echo "$verabschiedung $name";

    1. acha,

      Ich habe schon erfaren.
      Das funktioniert in Attributen, aber nicht in Value.
      Das ist ein Fehler von PHP-Parser.

  2. Hallo Heinrich.

    Ich möchte mit PHP-Parser folgende Zeichenkette parsen: "<TEST>A&B&C</TEST>".

    […]

    Hat jemand eine Idee, was machen, um TEST = "A&B&C" bekommen ?

    Mittels DOM wären es drei Zeilen:

    $obj_doc = new DomDocument;  
    $obj_doc->loadXML('<TEST>A&amp;B&amp;C</TEST>');  
      
    echo $obj_doc->documentElement->tagName . ' = "' .  
         $obj_doc->documentElement->nodeValue . '"';
    

    Setzt natürlich PHP5 voraus …

    Einen schönen Samstag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules