Starší komentáře ke článku: Vytvoření parseru a analýza dokumentu XML

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Roman Banot

Datum vložení: 8.2.2002 7:49:30

Chtel bych poprosit autora clanku "Jednoduchý internetový obchod v PHP, 1. díl" o zaslani ukazkoveho souboru sortiment.txt.

Predem dekuji

Avatar

Autor komentáře: jozo

Datum vložení: 8.2.2002 10:39:33

skusali ste parsovat subor vacsi ako 4kb??? funguvat to nebude... preco???

koniec prveho nacitaneho bloku (4069b):
<item>neake data </it

zaciatok druheho bloku (4069b):
em>
<item>neake data 2</item>

na <it vam parsek skonci chybou :)


PS. mohli ste dat rovno link na php.net

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 8.2.2002 12:05:56

Podivam se na to a budu vas informovat....
Je pravda, ze analyzovat vetsi dokument nez 4kb jsem timto skriptem nezkousel, nepredpokladal jsem, ze by to zrovna na tomhle mohlo exnout.
Jaky konkretni link na php. net mate na mysli?

Avatar

Autor komentáře: Ondřej Jureček

Datum vložení: 9.2.2002 6:53:59

Mel na mysli asi link na clanek, ktery o tomto pojednava dost podrobne.. Nejsem si jist, zda ja na php.net ci zend.com, odnekud jsem si ho pred tremi tydny tisknul. :)

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 9.2.2002 19:56:33

Zdravim,

pokud ten zdroj zjistite, dejte mi vedet, dekuji

Ondra Marek

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 8.2.2002 18:17:44

Jeste jednou raguji na Vasi pripominku - parser normalne funguje i pro vetsi soubory, zkousel jsem to na souboru o velikosti skoro 9 kb a bez problemu.
S pozdravem
Ondra Marek

Avatar

Autor komentáře: h!ynek

Datum vložení: 9.2.2002 14:16:03

Tak, mam pocit, ze autor ani poradne nevi o cem to pise, ze? (nebo to v te knizce nebylo popsano:o)) Tam neni napsano, ze se vezmou 4kB a hotovo, ale ze se to po tech 4kB bude zpracovavat. BTW. tak se pristupuje i k DB.

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 9.2.2002 19:54:05

zdravim,
no, spis si myslim, ze nevite, o cem pisete Vy. Prectete si ten clanek jeste jednou a pozorne, co vice k vasem "prispevku" mohu dodat...
O jake knizce to proboha mluvite?
Ondra Marek

Avatar

Autor komentáře: Petr Novak

Datum vložení: 10.2.2002 21:46:23

Problem je podle mne v tom, kdyz se konec toho 4kb bloku trefi do tagu. Pokud je konec v textove casti, tak parcer vytvori dva textove elementy a zpracuje je spravne.
Petr

Avatar

Autor komentáře: Jirka Kosek

Datum vložení: 11.2.2002 0:35:49

A zkoušel jste to, když je v tom podle vás problém?

Funkce xml_parse() nezpracovává celý předaný blok dat. Klidně se ukončí, i když ještě kus XML dokumentu nezpracovala (třeba proto, že zatím je v bufferu jen část názvu elementu). Parser čeká na její další zavolání s dalším blokem dat a teprve pak parsování dokumentu pokračuje.

Jen v případě, že je třetí parameter true, zpracují se všechna předaná data. Parametr signalizuje, že jsme již parseru předali celý dokument a může tedy bezpečně dokončit čtení dokumentu.

Tento přístup ke čtení XML dokumentu -- tzv. push parser --, který používá call back funkce, dělá některým programátorům problémy. Proto jsou v poslední době hodně populární pull parsery, kdy si v cyklu programátor postupně čte jeden uzel dokumentu za druhým. Pro PHP zatím takový parser není.

Avatar

Autor komentáře: Blbecek neduvtipny

Datum vložení: 8.2.2002 11:16:46

...ze jsem se v celem clanku nedozvedel, co to vlastne je ten parser, ktery vytvarim (nebo ze aspon na konci neni aspon odkaz na souvisejici clanek, kde bych se to dozvedel) :-(

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 8.2.2002 12:12:17

parser = analyzator dokumentu xml, obecne parser = syntakticky analyzator, omlouvam se za nedostatecna teoreticka vysvetleni, ktera byla v clanku opravdu zhustena na nejvyssi moznou miru, aby zbylo misto na prakticky priklad

s pozdravem
Ondra Marek

Avatar

Autor komentáře: Neki

Datum vložení: 11.2.2002 12:07:34

vim, ze bych se spise mel podivat nekam do chytre knizky, ale stejne se radsi zeptam (je to jednodussi :-)) - k cemu tedy tento "analyzator dokumentu xml" je?
z toho, co je v clanku, jsem pochopil, ze by se takto dalo pristupovat k xml souborum podobne jako k databazi, nebo se mylim?

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 11.2.2002 12:59:26

Ano, máte pravdu, xml soubor se potom může zobrazit např. jako tabulka s obsahy jdnotlivých elementů (něco podobného jako "datové ostrůvky" v Exploreru), ve které pomocí dalších skriptů php můžete např. vyhledávat, třídit atd., záleží už jen na Vaší fantazii. Chci se tomu věnovat i v dalších článcích.
Ondra Marek

Avatar

Autor komentáře: Neki

Datum vložení: 12.2.2002 9:29:17

diky za odpoved, urcite je to zajimave a aktualni tema.

Avatar

Autor komentáře: Agony

Datum vložení: 27.5.2002 16:53:28

Predpokladam, ze k tomu, aby mi to bezelo budu taky potrebovat soubor knohovna.dtd. Je nekde k mani?

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 28.5.2002 8:11:38

Soubor knihovna.dtd je definice typu dokumentu a pro uspesne spusteni prikladu popisovaneho v clanku nutny neni. Slo mi jen o ukazani moznosti prevodu XML dokumentu na html stranku pomoci PHP (tedy bez nutnosti pouzivat datove ostruvky made in MicroSoft).

Avatar

Autor komentáře: Agony

Datum vložení: 28.5.2002 14:01:09

A bere se vubec v uvahu dtd pri tomto zpusobu parserovani?
A jeste jedna otazka. Kdyz se mi mezi tagy objevi znak & , tak mi to parser nevezme a vyhodi chybu, nevi nekdo co s tim?

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 28.5.2002 19:18:16

parser php nekontroluje validitu xml dokumentu, co se tyce druhe otazky - znak & mezi tagy se v xml dokumentech nahrazuje &

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 28.5.2002 19:20:24

spatne - & se nahrazuje jako & a za tim amp a strednik

Avatar

Autor komentáře: Marabu

Datum vložení: 13.11.2002 11:28:37

&amp;

Avatar

Autor komentáře: Lukas Mach

Datum vložení: 7.7.2002 16:30:56

Delal jsem s tim a mam mensi problem s jednoduchymi tagy (napriklad <br/>, <img/>) mam dejme tomu XML dokument ve kterem mam i HTML znacky. Nemam definovano DTD (nepotrebuju ho). Kdyz mam pak dokument:

<!xml ... >
<dokument>
nejaky text ... <br/>
</dokument>

Tak, kdyz parser narazi na znacku <br>, tak vyvola nejen startElementHandler, ale i endElementHandler. Ten svuj parser jsem delal podle manualu php, takze by to melo bejt podobny. Nevim jak rozlisit, jestli tag, ktery prave zpracovavam ve startElementHandler bude normalni (<br></br>) nebo jednoduchy (<br/>). No - mozna kdyz tam definuju DTD, tak to pobezi (ale to tam bude muset bejt DTD pro vsechny HTML znacky + jeste pro ty moje...)

Jinak jsem ten svuj parser (kterej je podobnej tomuhle) zkousel na datech okolo 1MB a bylo to celkem vpohode, ten limit 4kb tomu samozrejme nevadi.
(a ani mu to netrvalo moc dlouho)

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 9.7.2002 18:33:23

a neni to spravne chovani parseru?
kdyz narazi na tag jako <br />, tak vyvola funkci startElementHandler i EndElementHandler - a co by mel tedy podle Vas udelat?
kdyz narazi na tag <img .... />, udela totez a nacte do pole i prislusne atributy tagu - src, width, height apod. -
jak potom s temito vysledky nalozite, zalezi na Vas a na tom, jaky napisete php skript na zpracovani prislusnych promennych

Avatar

Autor komentáře: Lukas Mach

Datum vložení: 9.7.2002 20:17:33

Asi to bude spravne chovani parseru, me by spis zajimalo, jak zjistit, jestli tag, ktery prave zpracovavam je zapsan jako <a></a>, nebo jako <a/> - protoze prvni pripad explorer interpretuje jako dva nove radky. Zkousel jsem to pomoci zjisteni pozice a ja nevim ceho jeste a neslo to (u starthandleru je totiz pozice leve zavorky, u endhandleru je brana pozice lomitka - tedy u tech "jednoduchych" tagu)

Situace: Nas parser nahrazuje nektere znacky xml kodem html (neco jako XSLT). Znacku <a> nahradi "XXX", znacku </a> kodem "YYY". Ostatni znacky necha projit beze zmeny. Tak - a kdyz ted napisu:

<a><br></br></a>

Tak to udela:XXX<br></br>YYY; Kdyz napisu:

<a><br/></a>

Tak dostanu:XXX<br></br>YYY; to proto ze ten php parser me posila vyskyt <br/> dvakrat - jak do StartElementHandleru, tak do EndElementHandleru a to zpusobem, ktery ja nedokazu rozlisit... Dokazate to vy? Napada me: on si urcite musi nekde ukladat informace jako pocet otevirajicich tagu v dokumentu a pocet uzavirajicich apod (kvuli zakladni kontrole validity). Muzu se k tem infromacim dostat?

V tuto chvili to resim tak, ze vsem zakazuji pouzivat jednotlive tagy a dokumenty formatovat ciste na bazi XML - zadny HTML kod - ten se tam prida az pri "sablonovani". To je parada, ale stejne mozna nekdy budu muset nejaky single tag pouzit...

Avatar

Autor komentáře: Lukas Mach

Datum vložení: 9.7.2002 20:22:00

> ktery prave zpracovavam je zapsan jako <a></a>, nebo
> jako <a/> - protoze prvni pripad explorer interpretuje
> jako dva nove radky.

sorry, melo to vypadat takhle:

ktery prave zpracovavam je zapsan jako <br></br>, nebo
jako <br/> - protoze OBA pripady explorer interpretuje
jako dva nove radky - tak jak docilim toho, aby mi vytiskl jen jeden?

Avatar

Autor komentáře: Ondra Marek

Datum vložení: 10.7.2002 12:41:19

parser NENÍ validující, takže k informacím o počtu uzavírajících, resp. otevírajících tagů se nedostanete (alespoň podle mých stávajících znalostí), já Vám s tímto problémem asi více nepomohu, předpokládám, že z podobného důvodu je snaha o zavádění XHTML, který v takovýchto případech používá tvar <br />
zkuste se zeptat p. Soldáta :))
psal o uplne stejne tematice v clanku
<a href='http://www.interval.cz/clanek.asp?id=1218' target='_blank'>http://www.interval.cz/clanek.asp?id=1218</a>

Avatar

Autor komentáře: HonzaM

Datum vložení: 25.10.2005 8:47:23

Prosím mohl by jste se v nejbližším příštím článku zaměřit na problematiku importu dat z XML souborů do databáze MySQL a na vyhledávání v souborech XML. Děkuji.

Zpět na článek | Úvodní stránka Interval.cz