Názor k článku PHP 4.3.0 a XSLT od espinosa - Ja osobne jsem nebyl moc spokojeny ani s...

  • Článek je starý, nové názory již nelze přidávat.
  • 6. 1. 2003 3:22

    espinosa (neregistrovaný)

    Ja osobne jsem nebyl moc spokojeny ani s domxml (PHP verze 4.2.1) Bylo tam dost bugu a chovani nekterych funkci se menilo z verze na verzi, komplikovana prace s namespaces (bylo nutne je VSECHNY zaregistrovat, nez slo s elementy pracovat)

    I tak trivialni operace jako zmena dat v elementu vyzadovala volat 3 (!) prikazy a musel jsem si na to udelat vlastni funkci:

    function my_set_value($doc,$element,$value) {
    $content = $element->first_child();
    $content->replace_node($doc->create_text_node($value));
    }

    ..a navic, ve starsich verzich to fungovalo jinak!
    Problem byl v metode set_content(), ta ve starsich verzich menila cely obsah tagu (replace), v novejsich PRIDAVALA (append) data ke starsim, bylo proto nutne nejdrive starsi zrusit.

    ..inu experimentalni rozhrani. Autori dobre vedeli proc pred nim v dokumentaci varovali :-)

    Pak jsem objevil knihovnu XPath. Nenechte se zmat nazvem, poskytuje jednoduche a univerzalni rozhrani k praci s XML dokumentem (zjisteni dat, zemna dat, zmena struktury, vyhledavani, export do souboru s hezkou upravou atd.)

    Vyhody:
    - extremne jednoducha
    - cela napsanan v PHP! zadna zavislost na nejake
    nativni knihovne nebo externim parseru.
    Zvlaste vhodna pro free servery s PHP kde
    neni zadny parser.
    - rychla!
    - stabilni projekt
    - na zadny bugy jsem nenarazil
    - neni zavisla na verzi PHP
    - stabilni API (lehce objektove)

    Vrele vsem doporucuji!
    http://sourceforge.net/projects/phpxpath/

    Tady je kratka ukazka prace:
    <?
    require_once("XPath.class.php");
    $doc= new XPath();
    $doc->importFromFile("pokus.xml");

    // zjisti kolik ma tabulka bunek <ccc> pred zmenami
    $pole_bunek = $doc->evaluate("//ccc");
    echo "pocet: ".count($pole_bunek)."\n"; // ==> 1

    // absolutni cesta k bunce
    // je to spis jako index k asoc. poli nez XPath :-)
    echo "Vypis: ".$doc->getData("/root[1]/aaa[1]/bbb[1]/ccc[1]")."\n"; // ==> "nejaka hodnota..."
    $doc->replaceData("/root[1]/aaa[1]/bbb[1]/ccc[1]","novy obsah");

    // zmeny ve strukture
    // pomoci kusu kodu XML ve forme stringu, nebo lze i pomkoci pole se specialnim formatem
    $doc->appendChild("/root[1]/aaa[1]/bbb[1]","<ccc>pridano</ccc>"); // ..automaticky se zkonvertuje do elementu!
    $doc->appendChild("/root[1]/aaa[1]/bbb[1]","<ccc>taky pridano<ddd>1</ddd></ccc>");
    $doc->appendChild("/root[1]/aaa[1]/bbb[1]","<ccc>..do tretice pridano<ddd>2</ddd></ccc>");


    // zjisti kolik ma tabulka elementu <ccc> po pridani
    $pole_bunek2 = $doc->evaluate("//ccc");
    echo "pocet <ccc> po pridani: ".count($pole_bunek2)."\n"; // ==> 4

    // zjisti kolik ma tabulka elementu <ddd> po pridani
    $pole_bunek3 = $doc->evaluate("//ddd");
    echo "pocet <ddd> po pridani: ".count($pole_bunek3)."\n"; // ==> 2

    $doc->exportToFile("pokus2.xml");
    ?>