Zdar, nevíte někdo o něčem takovém? V PHP5 mám výstup z
$s = simplexml_import_dom($doc);
$retval = $s->xpath($xpath);
potřeboval bych dostat buď úplně to samé nebo alespoň hodně podobné výstupy.
cz.php.net/nazev funkce
cz.php.net/simplexml_import_dom
se zkus podivat na priklady, obvykle je tam i ruzna nahrazka, pripadne u dalsich funkci s tim souvisejici
myslim, ze existuje jeste neco jako xml_load_from_file
kazdopadne je tam search a kdyz tam das XML, tak by to melo najit vsechno s XML
treba u
http://cz.php.net/manual/en/function.simplexml-load-file.php
mi prijdou posledni priklady hodne pouzitelne a upravitelne
Dík, tohle používám, ale potřebuju to samé pro PHP4. Jakýsi projekt, který jsem našel se o to snažil, ale právě metoda xpath měla ve svém těle napsáno akorát "not implemented".
Jakmile něco zjistím, dám vědět. :)
Koukám, že péťa je adept na titul "Agent s teplou vodou roku 2009". Nechcete někdo ty jeho perly archivovat? V knižním vydání by to určitě byl bestseller ;)
MzM: co ten xpath vrací (má vracet)? Nechce se mi to zkoušet tak abych věděl ;)
Tom: Když nevíš, co má XPath vracet, tak nekritizuj petu. Snažil se nastínit postup, jak se dopracovat k podobnému výsledku a doplnil to odkazy.
Pokud se chceš podívat, jak XPath funguje, stačí použít Google nebo se přímo podívat třeba na http://www.zvon.org/xxl/XPathTutorial/General_cze/examples.html
Ještě dodatek: Zkusil dát do googla dotaz PHP4 XPath a chtěl jsem výsledky česky. Po kliknutí na první odkaz jsem našel toto: http://sourceforge.net/projects/phpxpath/
Kit: nezlob se, ale mám pocit že péťovo snažení bylo zcela zcestné. Ano, simplexml_import_dom() je dobrá funkce, jenže má to dva háčky:
1) PHP5 only
2) aby jsi se dostal ke kódu co uvedl MzM tak musíš přes tuhle funkci projít.
Dobře, vrací to strom elementů k požadovanému prvku. To mě mohlo podle názvu "xpath" napadnout :/
Tak v tom případě by logicky stačilo:
1) xml_parser_ - like funkcí překopat strukturu XML na asociativní vícerozměrné pole (někde jsem na to měl funkci, dokonce jsem jí tuším zveřejňoval zde na fóru)
2) Rekurzí projít postupně všechny prvky, cestu si ukládat a zároveň porovnávat shodu klíče s požadovaným.
Z teorie do praxe to sice bude na delší dobu, ale neměl by to být problém.
No a nebo nasadit hotové řešení které jsi našel ;)
Tom: Myslel jsem si, že když se ptáš tímto způsobem, nemáš o XPath potuchy.
Našel jsem teď funkci http://cz.php.net/manual/en/function.xml-parse-into-struct.php a přidružené, které podle manuálu mají fungovat i v PHP4. Tak to MzM může zkusit.
Ten odkaz ze sourceforge.net jsem nedávno zkoušel. Řekl bych, že je to použitelné, i když to server zřejmě zatíží o něco víc, než XPath implementovaný přímo v PHP5.
Kit, tohle jsem taky našel, nějak to nechtělo spolupracovat tak, jak bych potřeboval. Asi jsem to špatně použil.
No nakonec jsem použil k PHP4 std připlácnuté domxml fce.
Všem díky za snahu a vzácný čas.
Tom (manual.wz.cz)
Muzu vedet, co se ti na odpovedi nezda?
Kdyz na php.net zadas hledat XML, tak jedna z funkci na strance je xml_parse. U ni je napsano ze je mozne ji pouzit pro PHP4 PHP5
Pro ty mene chapave mych odpovedi asi zacnu kopirovat manualy :)
xml_parse
(PHP 4, PHP 5)
xml_parse — Start parsing an XML document
Description
int xml_parse ( resource $parser , string $data [, bool $is_final ] )
xml_parse() parses an XML document. The handlers for the configured events are called as many times as necessary.
Parameters
parser
A reference to the XML parser to use.
data
Chunk of data to parse. A document may be parsed piece-wise by calling xml_parse() several times with new data, as long as the is_final parameter is set and TRUE when the last data is parsed.
is_final
If set and TRUE, data is the last piece of data sent in this parse.
Return Values
Returns 1 on success or 0 on failure.
For unsuccessful parses, error information can be retrieved with xml_get_error_code(), xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number() and xml_get_current_byte_index().
Note: Entity errors are reported at the end of the data thus only if is_final is set and TRUE.
xml_parser_create_ns> <xml_parse_into_struct Last updated: Fri, 09 Jan 2009
dobra, mozna to neresi problem xpatch, ale vsadim se, ze tam bude i takova funkce nebo priklad, ktery to resi :)
Tak se, děcka, nehádejte, všichni máte pravdu. ;-) Jenom pro kompletní informaci, jak jsem to použil:
$doc = domxml_open_mem($xml);
$XPDoc = $doc->xpath_new_context(); // php4 object
$nodelist = $XPDoc->xpath_eval($xpath.'/text()');
^^^ tohle je ala PHP4 - potřebuje domxml knihovnu (přilinkovat, přikompilovat)
a
$doc= new DOMDocument(); // PHP5 objekt!
$XPDoc = new DOMXpath($doc);
$nodelist = $XPDoc->query($xpath);
tohle PHP5
vrátí to malinko něco jiného, ale k účelům, které potřebuju to funguje.