Nerozumiem, co je presne cielom :-)
Chcete naparsovat nevalidne a nonwellformed HTML do DOMu a s nim dalej
pracovat?
Lebo vsetky HTML parsery opravuju povodny DOM: napr. radostne pridavaju
nove elementy
a ked ,,opraveny" (= wellformed) DOM ulozite na disk, tak mozete dostat
iny zdrojak.
Priklad: ak si naparsujete "<td>", tak po sparsovani a spatnom
serializovani dostanete
"<td></td>" a uz mate rozdiel.
U nas kolega spokojne pouzival Validator.nu parser, to je HTML5 parser v
Jave:
http://about.validator.nu/htmlparser/
RN
On 18. 2. 2011 12:50, Dušan Rychnovský wrote:
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ý