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ý
>> >
>> >
>>
>
>