Názory k článku PHP 4.3.0 a XSLT

  • Č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");
    ?>

  • 6. 1. 2003 13:51

    Nepto (neregistrovaný)

    1. To, ze je do PHP zahrnuty cely MySQL RDBMS mi pripada ako mensi vtip. Je mi jasne, ze mal autor na mysli zrejme cosi ine, ale neviem prist nato, ze co.

    2. Co sa tyka pouzitia XSLT z hladiska buducnosti, myslim, ze jedina schodna cesta je pomocou obecnych PEAR modulov [0]. Vyvoj v tomto smere uz zacal [1]. Iba tak sa totiz moze zarucit kopatibilita do buducnosti, ked budu ako "extensions" pridane aj dalsie parsery, o ktorych autor pisal.

    Preto by IMHO standartny vyvojar/programator web aplikacii nemal s xslt_*() funkciami [2] vobec prist do priameho kontaktu.

    3. Historia bola podana dobre. Kazdopadne je nutne si uvedomit, ze ludia okolo PHP maju toho naozaj vela, takze to, ze s nimi niekedy viazne komunikacia nie je naozaj nic netradicne. V zasade sa da ale povedat, ze v PHP vyvoji pride vzdy na vsetko, je len otazkou casu a dostupnych zdrojov za aku velku dobu. :-)

    [0] http://pear.php.net/
    [1] http://pear.php.net/package-info.php?pacid=121
    [2] http://www.php.net/manual/en/ref.xslt.php

  • 6. 1. 2003 16:28

    Petr Cimprich (neregistrovaný)

    ad 1. Ano, ta formulace je zavadejici. V PHP neni cele MySQL, pouze klientske knihovny (viz ext/mysql/libmysql). Presto je MySQL dobrym prikladem produktu, ktery je (byt ne cely) bundlovan s PHP. Sablotron se mel stat dalsim takovym produktem, ale nestal - to je vse, co jsem chtel rict.

  • 6. 1. 2003 21:41

    Nepto (neregistrovaný)

    Ano to je pravda. Dokonca so zrieknutym copyrightom (Copyright Abandoned; zrejme aby to bolo v sulade s PHP licenciou) a taktiez s Perl skriptom na updatovanie zdrojakov. :-))

  • 6. 1. 2003 20:44

    btudruz (neregistrovaný)

    Zdravim!

    Ponekud nechapu vase reci o zadnich vratkach u libxslt. Tato knihovna je soucasti knihovny libxml (http://xmlsoft.org/), vcetne snahy ziskat k nim co
    nejvice "bindings" do ruznych skriptovacich jazyku
    a do PHP se dostala jako soucast tohoto projektu (ktery si mj. klade za cil implementovat co nejvice
    w3c technologii). Chapu, ze uprednostnujete Sablotron,
    ale proto se snad nemusi takhle hloupe obouvat do jinych.

  • 7. 1. 2003 9:44

    Petr Cimprich (neregistrovaný)

    Prepsanim ext/sablot na ext/xslt byly pripraveny podminky pro integraci dalsich procesoru; nejvetsi zajem na tom meli hlavne uzivatele libxslt. Potom vsak libxslt nevstoupilo do PHP timto ocekavanym zpusobem, ale pres nove vzniklou extenzi ext/domxml. Tedy, obrazne receno a bez pejorativniho vyznamu, zadnimi vratky (tj. jinudy nez mnozi ocekavali).