Čítanie a zápis dát vo formáte XML v Groovy 1.6.0
Ako niekoľkoročného Java vývojára ma prekvapilo akým jednoduchým spôsobom je možné v Groovy čítať a zapisovať dáta vo formáte XML. V jednom z projektov som túto jednoduchosť využil a chcel by som sa podeliť o svoje skúsenosti.
Čítanie
Na čítanie dát je možné použiť triedu groovy.util.XmlParser alebo triedu groovy.util.XmlSlurper. Hlavný rozdiel medzi týmito triedami je ten akým spôsobom sa pristupuje k naparsovaným dátam. Trieda XmlParser poskytuje naparsované dáta ako inštanciu triedy groovy.util.Node a umožňuje aktualizáciu dát. Trieda XmlSlurper poskytuje naparsované dáta ako inštanciu triedy groovy.util.slurpersupport.GPathResult a neumožňuje aktualizáciu dát. Obidva spôsoby budú demonštrované na príklade. Cieľom je získať hodnotu elementu ipAdresa a hodnotu atribútu verzia.
Dáta
<sprava>
<zdroj>
<ipAdresa verzia="IPv6">
2001:0db8:85a3:08d3:1319:8a2e:0370:7334
</ipAdresa>
</zdroj>
</sprava> Čítanie pomocou XmlParser
def sprava = new groovy.util.XmlParser().parseText(data)
System.out.println sprava.zdroj[0].ipAdresa[0].text()
System.out.println sprava.zdroj[0].ipAdresa[0].attribute('verzia')Čítanie pomocou XmlSlurper
def sprava = new groovy.util.XmlSlurper().parseText(data)
System.out.println sprava.zdroj.ipAdresa
System.out.println sprava.zdroj.ipAdresa.@verzia Prvý spôsob je klasickejší a má bližšie k použitiu API štandardných knižníc na parsovanie XML. Druhý spôsob je inovatívnejší, umožňuje napísať kratší kód.
Zápis
Podobne ako pri čítaní dát je možné aj pri zápise použiť dve triedy, prvá je groovy.xml.MarkupBuilder, druhá je groovy.xml.StreamingMarkupBuilder. MarkupBuilder poskytuje oproti StreamingMarkupBuilder limitovanejšiu funckionalitu, implicitne odosiela výstup do System.out, výstup je generovaný okamžite a je formátovaný tak aby bol dobre čitatelný (tzv. pretty-print). StreamingMarkupBuilder vyžaduje aby mu bola pre generovanie výstupu poskytnutá inštancia triedy Writer (pokiaľ nie je táto inštancia poskytnutá nie je generovaný žiadny výstup), jeho výstup nie je formátovaný. Na príklade bude demonštrované akým spôsobom je možné zapísať dáta do súboru pomocou uvedených tried.
Dáta
<faktura cislo="C07091981">
<suma>
19500
</suma>
</faktura>Zápis pomocou StreamingMarkupBuilder
new FileWriter('faktura.xml') << new groovy.xml.StreamingMarkupBuilder().bind {
faktura(cislo: 'C07091981') {
suma('19500')
}
}Zápis pomocou MarkupBuilder
new groovy.xml.MarkupBuilder(new FileWriter('faktura.xml')).faktura(cislo: 'C07091981') {
suma('19500')
} Pri porovnaní výsledných kódov je vidieť, že sú takmer totožné. Je v podstate jedno či sa použije StreamingMarkupBuilder alebo MarkupBuilder. StreamingMarkupBuilder sa používa v prípadoch, keď je požadovaná rozšírená funkcionalita ako menné priestory (namespaces), inštrukcie spracovania (processing instructions), generovanie CDDATA, generovanie časti dokumentov oddelene a generovanie veľkých objemov dát do súborov.
Kompletné informácie týkajúce sa Groovy a XML je možné nájsť na http://groovy.codehaus.org/Processing+XML.
Pridané 27.5.2009 o 11:38 Alešom Ondrúšom, späť na návody