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]
<mailto:[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] <mailto:[email protected]>>
Co znamena "velmi rozhozeny"?
S pozdravem
Ondřej Nekola
2011/2/18 Dušan Rychnovský <[email protected]
<mailto:[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ý
>
>