Dne 1. září 2010 15:48 Kamil Podlesak <[email protected]> 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 <[email protected]>:
>> 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 <[email protected]>
>>     Předmět: Divná chyba v SAX parseru?
>>       Datum: 1. září 2010, 11:25:40 (GMT +0200)
>>     Přílohy: <none>
>>       msgid:[email protected]
>>
>> 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 <[email protected]>:
>>>> 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: [email protected]
>>>>     WWW: http://www.atomsoft.cz
>>>>     ICQ: 87147320
>>>> ---------------------------------------------------------------------
>>
>>
>> ------------------------ Konec původní zprávy ------------------------
>>
>> --
>> ---------------------------------------------------------------------
>>  Tomáš Procházka
>>
>>
>>  E-mail: [email protected]
>>     WWW: http://www.atomsoft.cz
>>     ICQ: 87147320
>> ---------------------------------------------------------------------
>



-- 
Oto 'tapik' Buchta, [email protected], http://tapikuv.blogspot.com

Odpovedet emailem