Dne 3. září 2010 11:04 Kamil Podlesak <kamil.podle...@gmail.com> napsal(a):
> S čím konkrétně nesouhlasíte? Nějak mi to nedává smysl...

S generickým tvrzením, že při zpracování obrovských XML je třeba
hlídat OutOfMemory. Mnoho lidí o pull parserech v životě neslyšelo a
proto by ono tvrzení mělo obsahovat klíčovou formulaci "při použití
SAXu", už jenom proto, aby to lidi trklo, že asi existuje technologie
zpracování XML jiná než SAX, u které to nehrozí.

Ano, mohl jsem volit slova jako "ještě bych doplnil...", ale takto je
to více do očí bijící. Takže nic proti.

> Samozřejmě, pull parser je v takovémto případě lepší než SAX - však
> také proto pull parsery vůbec existují.
> Ale to neznamená, že se nikdo nepokoušel SAX parser optimalizovat.
>
> Kamil Podlešák
>
> 2010/9/2 Oto Buchta <ta...@buchtovi.cz>:
>> Dne 1. září 2010 15:48 Kamil Podlesak <kamil.podle...@gmail.com> napsal(a):
>>> Ono se to nezdá, ale používání stále jediné datové struktury (místo
>>> vytváření nových) ušetří hodně práce garbage collectoru a u opravdu
>>> obrovských xml to bude znát (dokonce by mohlo dojít OutOfMemoryError).
>>
>> Nesouhlasím. U opravdu velkých XML (řádově stovky MB a více) není
>> konstrukce objektové reprezentace XML vůbec žádoucí a tedy pro tento
>> případ je HashMapa na atributy získávaná pomocí PullParseru ideálním
>> řešením. A dobrý Pull Parser používá pool, takže se akorát přesunou
>> Stringy. Doufám, že takto funguje STAX (JSR 173). Nikdy jsem jiný než
>> Systinetí PullParser nepoužíval - od dob Systinetu jsem nedělal s
>> velkými XML.
>>
>>> Kamil Podlešák
>>>
>>> 2010/9/1 Tomáš Procházka <t.procha...@centrum.cz>:
>>>> Díky za tip. Zajímavé, že to v 99% funguje takto naprosto v pořádku,
>>>> kopírovat všechny atributy do hashmapy pro každý XML element mi příjde jako
>>>> zbytečnost, když už to je vše v instanci Attributes :-(
>>>>
>>>>
>>>> --------------------------- Původní zpráva ---------------------------
>>>>  Odesilatel: Kamil Podlesak <kamil.podle...@gmail.com>
>>>>     Předmět: Divná chyba v SAX parseru?
>>>>       Datum: 1. září 2010, 11:25:40 (GMT +0200)
>>>>     Přílohy: <none>
>>>>       msgid:aanlktim1orq7=mcrkbitxqjgseuxprdncpsbrsc4s...@mail.gmail.com
>>>>
>>>> K> Zdravím,
>>>>
>>>> K>  Nejedná se o chybu, v dokumentaci (javadoc k metodě startElement, od
>>>> K> verze 1.5 výše) je napsáno:
>>>>
>>>> K> atts - the attributes attached to the element. If there are no
>>>> K> attributes, it shall be an empty Attributes object. The value of this
>>>> K> object after startElement returns is undefined
>>>>
>>>> K>  Ta poslední věta je klíčová: data z těch atributů si musíte "vytahat"
>>>> K> do nějaké vlastní struktury.
>>>>
>>>> K> Kamil Podlešák
>>>>
>>>> K> 2010/9/1 Tomáš Procházka <t.procha...@centrum.cz>:
>>>>>> Zdravím.
>>>>
>>>>>> Setkal se už někdo s tím, že si standardní SAX parser v JDK 1.6
>>>>>> (konkrétně
>>>>>> mám 1.6.0.18) vymýšlí neexistující hodnota atributů v XML?
>>>>
>>>>>> Konkrétně mám XML, které obsahuje kromě jiného asi 20 000 takovýchto
>>>>>> elementů?
>>>>>> <replace key="...">...</replace> například <replace
>>>>>> key="unsubscribe">http://nekde.cz/neco.html</replace>
>>>>
>>>>>> V SAX handleru, bez jakéhokoliv knihovny, jen v samotné Javě.
>>>>
>>>>>> V handleru pak v metod
>>>>
>>>>>> public void startElement() si pak pouze uložím do třídních proměnných
>>>>>> atributy tagu a nuluju StringBuffer
>>>>
>>>>>> this.value.setLength(0);
>>>>>> this.attributes = attributes;
>>>>
>>>>>> v endElement() pak ukládám do mapy vždy hodnotu atributu key a obsah
>>>>>> celého
>>>>>> elementu, tedy:
>>>>
>>>>>> someMap.put(attributes.getValue("key"), value.toString());
>>>>
>>>>>> všechno funguje, až na to, že zhruba v 300 případech z těch 20 000
>>>>>> elementů
>>>>>> se přečte úplně jiný klíč, přípustné hodnoty jsou jen unsubscribe a link
>>>>>> a v
>>>>>> těch 300 případech tam je něco jako "          <"
>>>>
>>>>>> Což je samozřejmě nepřípustné
>>>>
>>>>
>>>>>> Zkoušel jsem za
>>>>
>>>>>> this.attributes = attributes;
>>>>
>>>>>> přidat
>>>>
>>>>>> if (attributes.getValue(0) != null &&
>>>>>> !"link".equals(attributes.getValue(0))
>>>>>> && !"unsubscribe".equals(attributes.getValue(0))) {
>>>>>>   logger.error("-------- '" + attributes.getValue(0) + "'");
>>>>>> }
>>>>
>>>>>> abych si zalogoval všechny případy kdy k tomu dojde a přestalo to dělat,
>>>>>> téměř úplně
>>>>
>>>>>> Takové chování VM vůbec nechápu. Kdyby to dělalo jen na jednom stroji,
>>>>>> tak
>>>>>> řeknu, že je něco rozbité na něm. Jenže na ten problém jsme přišli na
>>>>>> Linuxovém serveru a bez problémů jsem ho napodobil i na Windows stroji.
>>>>>> navíc import ještě probíhá jen v jednom vlákně.
>>>>
>>>>
>>>>
>>>>>> Datum: 9:38:09    1. září 2010
>>>>>> --
>>>>>> ---------------------------------------------------------------------
>>>>>>  Tomáš Procházka
>>>>
>>>>
>>>>>>  E-mail: t.procha...@centrum.cz
>>>>>>     WWW: http://www.atomsoft.cz
>>>>>>     ICQ: 87147320
>>>>>> ---------------------------------------------------------------------
>>>>
>>>>
>>>> ------------------------ Konec původní zprávy ------------------------
>>>>
>>>> --
>>>> ---------------------------------------------------------------------
>>>>  Tomáš Procházka
>>>>
>>>>
>>>>  E-mail: t.procha...@centrum.cz
>>>>     WWW: http://www.atomsoft.cz
>>>>     ICQ: 87147320
>>>> ---------------------------------------------------------------------
>>>
>>
>>
>>
>> --
>> Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com
>>
>



-- 
Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com

Odpovedet emailem