Title: Re: Divná chyba v SAX parseru?
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
---------------------------------------------------------------------

Odpovedet emailem