S čím konkrétně nesouhlasíte? Nějak mi to nedává smysl... 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 <[email protected]>: > 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 >
