Komentáře k článku
XPath – rychle to najdeme

V dnešním pokračování seriálu o práci s dokumenty ve formátu XML v jazyce PHP se podíváme na dotazovací jazyk XPath. Na rozdíl od předcházejících metod zpracování XML v XPath neurčujeme, jak se má s informacemi naložit, ale specifikujeme, jaká data chceme.
Doplnění - získejme všechny elementy "title"
Ještě bych doplnil: pokud si přejeme získat všechny elementy „title“ bez ohledu na to, kde jsou ve stromu zasazeny, můžeme použít:
$vysledek = $xpath->evaluate(„//title“);
Tedy na začítek nasadíme dvě lomítka. (Alespoň takhle jsem to dřív dělal já :)
… ale přesně TOHLE je určitě popsáno v knize, že? (nerad bych knihu sabotoval..)
Re: Doplnění - získejme všechny elementy "title"
Já bych zase dopnil, že // není dobré používat, pokud to není nezbytně nutné, protože naivní implementace XPathu (ta je třeba i v PHP) procházejí všechny uzlu dokumentu a vyhodnocení dotazu je tak relativně pomalé. Je lepší používat co nejvíce specifické dotazy.
Pamětová náročnost
Zajímalo by mne, jaka je paměťová náročnost čtení přes DOM, případně použití XPathu. Nevíte někdo ?
Re: Pamětová náročnost
Hmm, nekdy mala, nekdy velka, nekdy tak akorat… :-)
Vazne, zalezi na tom jaky zpracovavate dokument a jake jsou pozadavky Vasi aplikace. Existuji ale i implementace (ne v PHP) XPath bez nacitani dokumentu do pameti, napr. v ramci http://exist.sourceforge.net/.
Re: Pamětová náročnost
Záleží na konkrétní implementaci a konkrétním dokumentu XML, ale obvykle v paměti DOM strom zabere 3–10× více prostoru než stejný dokument při serializaci do XML.
XPath samotný paměťově náročný není je to dotazovací jazyk – podstatné je, nad jakým úložištěm dotaz pokládáte. V PHP můžete XPath pokládat nad DOM nebo SimpleXML reprezentací (v paměti zaberou v podstatě stejně místa). Pokud je dat hodně a do paměti se nevejdou, je vhodné pro ukládání použít nějakou databázi XML a nad ní spouštět XPath/XQuery dotazy.
Podmnožinu XPathu lze navíc vyhodnocovat streamovaně a zpracovávat tak dokumenty teoreticky neomezené velikosti. Umí to napřípad STXPath (http://stx.sourceforge.net/), bude to umět připravované XSLT 2.1.
Re: Pamětová náročnost
Díky za odpověď.