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ý

Odpovedet emailem