Diskuze: Java - nejvhodnější třída k parsování XML SAXem

Java Java Java - nejvhodnější třída k parsování XML SAXem

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Zdravím, opět ten samý problém v Javě, milion tříd, chabá dokumentace. Nalezl jsem XMLReaderFactory, XMLInputFactory, SAXParserFactory a určitě tam jsou ještě nějaké další možnosti. Máte s tím někdo zkušenosti?

Odpovědět 7.5.2013 12:05
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Použiji SAXParser, snad to je správná volba.

Nahoru Odpovědět 7.5.2013 12:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět 7.5.2013 12:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Ne :) Vygenerovaná dokumentace mi nestačí, chci vědět kterou třídu mám použít, ne jak ji použít. Po chvíli Googlení jsem zjistil, že SAX je wrapper nad readerem, ale stejně jsem nikde nenašel proč používat zrovna Sax, nicméně to bylo na několika místech doporučeno.

Editováno 7.5.2013 12:15
Nahoru Odpovědět 7.5.2013 12:15
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Myslím si, že pro každý případ se může hodit jiná třída. Psali to zřejmě různí autoři, každý s jiným výsledkem. Otestuj všechny a pak si vyber.

Java není jako C#, kde pro každý účel je jen jedna vhodná třída.

Nahoru Odpovědět 7.5.2013 12:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Na to nemám čas a i kdybych ho měl, tak bych to neudělal, protože bych ho využil nějakým lepším způsobem. V C# je pro zápis XML XmlWriter a pro čtení XmlReader, ještě je pod tím vždy ukázáno jak třídu používat. Tak by to mělo být, vždyť je to SAX, jeden způsob, jedna třída. Duplicitní třídy ve standardní knihovně jazyka jsou chybou v jejím návrhu.

Jinak koukám, že oficiální dokumentace Javy nemá na mnoha místech ani zvýrazněnou syntaxi :X

Jak jsem psal, SAX je wrapper, to druhé se zdá být abstraktní, pak je ještě reader, takže máme v Javě 4 třídy pro 1 věc, možná bych našel i další. Teď koukám, že pro generování dokumentů mohu použít XMLStreamWriter (pro čtení se reader samotný nepoužívá) nebo nějakou TransformerFactory, aby těch názvů nebylo málo :)

Nahoru Odpovědět 7.5.2013 12:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Koukám třeba, že XmlReader je interface a XmlStreamReader je třída. Kdyby se alespoň používala konvence I před interfacem, bylo by to hned lepší. C# má factory metody třeba přímo na třídě XmlReader, což mi dává větší smysl a pokud bych to oddělil, nepojmenovával bych factory úplně jinak než to co tvoří.

Nahoru Odpovědět 7.5.2013 12:49
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Ještě jsem našel tohle :D

"SAXParserFactory [is] a hideous, evil monstrosity of a class that should
be hung, shot, beheaded, drawn and quartered, burned at the stake,
buried in unconsecrated ground, dug up, cremated, and the ashes tossed
in the Tiber while the complete cast of Wicked sings "Ding dong, the
witch is dead." --Elliotte Rusty Harold on xml-dev

Nahoru Odpovědět  +1 7.5.2013 12:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

No vidíš, jedna třída odpadla :)

Nahoru Odpovědět 7.5.2013 13:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Našel jsem si příklad na SAXParser a vypadá to docela sympaticky. Tedy pokud se to správně upraví.

Nahoru Odpovědět 7.5.2013 13:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Ta Java je opravdu neskutečná, teď jsem si konečně naivně napsal kód zápisu do XML a ona mi řekne, že XmlStreamWriter neobsahuje rozhraní nutné k použití v try-with-resources konstrukci. Čím více v ní dělám, tím méně v ní dělat chci.

Nahoru Odpovědět 7.5.2013 17:52
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět 7.5.2013 17:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Chtěl jsem vysvětlit SAX :( Nějak to dopíšu, ale je to opravdu hnus :X

K JAXB se dostanu, pokud je to hlavní cesta kterou se v Javě pracuje s DOM, už jsme viděl zas několik typů továren co se k práci s tím používají, achjo :D

Nahoru Odpovědět 7.5.2013 18:05
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Homo
Člen
Avatar
Odpovídá na David Čápka
Homo:

Se SAX jsem nikdy v Jave nedelal, ale DOM je pekne napsany zde
http://www.mkyong.com/…-dom-parser/

Nahoru Odpovědět 7.5.2013 18:11
1010011 1000101 1011000
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Homo
David Čápka:

Jo, na mkyonga jsem už koukal :)

Nahoru Odpovědět 7.5.2013 18:13
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.