Ještě bych rád upřesnil, co přesně je mým cílem. Programuju aplikaci, která na požádání stáhne webovou stránku (její kód) na disk a dále umožní provádět nad ní změny (např. přidat tagu CSS třídu, nebo ji naopak odebrat, atp.).
Snažím se to naprogramovat tak, že nejprve nad staženou stránkou vytvořím strom (DOM), ten pak můžu jednoduše upravovat. Nakonec vypíšu upravený HTML kód zpátky na disk do souboru pro následné zobrazení prohlížečem. Problém s parserem, který jsem použil je, že vytvořený DOM strom neobsahuje sám o sobě všechny informace o HTML kódu, ale odkazuje se na části původního souboru. Proto se snažím vždy po každé změně stromu upravit zpátky i parsovaný soubor. Aplikace bude malá, proto hledám pokud možno nějaký malý parser. Děkuju 2011/2/18 Robert Novotny <[email protected]> > Toto je nieco fakt velmi divne, ked to rozbije komplet subor. Pozeram, ze > su kadejake bugy reportovane k tej metode. Htmlparser ma poslednu verziu z > 2006, nechcete skusit fakt iny parser, lebo styri roky su styri roky? (Napr. > validator.nu sa stale vyvija) Mozno vas este zaujme NekoHTML, ten sa da > postavit ako filter pred Xerces. > > http://nekohtml.sourceforge.net/index.html > > > On 18. 2. 2011 13:17, Dušan Rychnovský wrote: > > Když jsem si ještě jednou prohlédl přiložené soubory, uvědomil jsem si, že > jsem zapomněl připsat: > > Kusy značek a atributů ("news", <li>, ...) rozmístěné doprostřed kódu > pocházejí z jiných částí parsované stránky. Celkově to působí, jakobych > upravil parsovaný soubor beze změny uloženého DOMu a při jeho opětovném > načtení se porušily odkazy do parsovaného souboru a proto je výsledkem > takovýto "rozházený" soubor. > > Proto jsem se snažil najít místo, kde by došlo ke změně DOMu a zároveň > neupravení původního dokumentu podle metody toHTML(), ale nenašel jsem > takové. > > Dušan Rychnovský > > > 2011/2/18 Dušan Rychnovský <[email protected]> > >> Co znamena "velmi rozhozeny"? >> >> Podle vzniklého souboru lze poznat, že souvisí s původním souborem. Ale >> >> 1. Má rozhozené kódování. >> 2. Textový obsah i formátovací značky jsou porušené. >> >> Nedaří se mi situaci pořádně popsat, proto přikládám ukázku původního a >> vzniklého kódu. >> >> >> S tím, že k nějakým změnám kódu dojde (opravám kvůli převodu >> nonwellformed HTML do DOM) počítám. U mě však dochází ke znehodnocení celého >> kódu (viz přiložené soubory). >> >> Na odkázaný parser se určitě podívám, děkuju. >> >> Dušan Rychnovský >> >> >> >> 2011/2/18 Ondrej Nekola <[email protected]> >> >> Co znamena "velmi rozhozeny"? >>> S pozdravem >>> Ondřej Nekola >>> >>> >>> >>> 2011/2/18 Dušan Rychnovský <[email protected]>: >>> > Dobrý den. >>> > >>> > Vytvářím program (JSE), který zpracovává HTML stránky. Stránku vždy >>> stáhnu z >>> > webu na disk, vybuduju nad ní DOM Tree a pomocí něj pak provádím různé >>> > úpravy. >>> > >>> > Pro stavbu DOM používám knihovnu "HTML Parser" >>> > (http://htmlparser.sourceforge.net/), a to z několika důvodů. >>> > >>> > 1. Potřebuju zpracovávat běžné webové stránky (tj. stránky s chybami >>> oproti >>> > XML standardům). >>> > >>> > 2. Potřebuju je zpracovávat rychle. >>> > >>> > 3. Změny v HTML kódu chci uchovávat i mezi spuštěními programu - >>> potřebuju >>> > DOM serializovat. >>> > >>> > Zjistil jsem, že "HTML Parser" při vytváření stromu nekopíruje textové >>> > elementy do paměti, ale nějakým způsobem se zřejmě odkazuje na části >>> > zparsovaného HTML souboru. >>> > >>> > Proto pokaždé, když provedu změnu v HTML kódu, uložím na disk >>> (serializuju) >>> > změněný DOM a přepíšu parsovaný HTML soubor pomocí metody toHtml() >>> třídy >>> > NodeList (aby si vždy DOM a parsovaná stránka odpovídaly). >>> > >>> > Tento postup funguje v pořádku až do té doby, než program vypnu a znovu >>> > zapnu (tj. zřejmě dokud neproběhne deserializace DOMu). Potom dostávám >>> při >>> > prvním volání toHtml() dokument velmi rozhozený. >>> > >>> > Kontroloval jsem několikrát, jestli se někde v průběhu nedostane >>> dvojice DOM >>> > - parsovaný soubor do nekonzistentního stavu, ale chybu jsem nenašel. >>> > >>> > Takže přemýšlím, jestli vůbec "HTML Parser" takovéto zacházení >>> podporuje >>> > (dokumentace je dost chudá). >>> > >>> > Máte někdo podobné zkušenosti s tímto parserem? Nebo víte o vhodnějším >>> > parseru pro moje účely (vygooglil jsem i různé jiné parsery, ale vždy >>> se mi >>> > z nějakého důvodu zdály nevhodné)? >>> > >>> > Díky za pomoc, >>> > Dušan Rychnovský >>> > >>> > >>> >> >> > >
