Práca so súbormi XML v prostredí Java pomocou analýzy modelu DOM

1. Prehľad

V tomto výučbe sa dozvieme, ako analyzovať DOM pomocou Apache Xerces - zrelej a zavedenej knižnice na analýzu / manipuláciu s XML.

Existuje niekoľko možností na analýzu dokumentu XML; v tomto článku sa zameriame na analýzu modelu DOM. Analyzátor DOM načíta dokument a vytvorí celý hierarchický strom v pamäti.

Prehľad podpory knižníc XML v prostredí Java nájdete v našom predchádzajúcom článku.

2. Náš dokument

Začnime s dokumentom XML, ktorý použijeme v našom príklade:

   Guava Úvod do programu Guava 4. 4. 2016 GuavaAuthor ... 

Upozorňujeme, že náš dokument má koreňový uzol s názvom „výukové programy“ so 4 podradenými uzlami „tutorial“. Každý z nich má dva atribúty: „tutId“ a „type“. Každý „výukový program“ má tiež 4 podradené uzly: „názov“, „popis“, „dátum“ a „autor“.

Teraz môžeme pokračovať v analýze tohto dokumentu.

3. Načítanie súboru XML

Najskôr by sme si to mali uvedomiť knižnica Apache Xerces je zabalená s JDK, takže nepotrebujeme žiadne ďalšie nastavenie.

Poďme priamo do načítania nášho súboru XML:

DocumentBuilder builder = DocumentBuilderFactory.newInstance (). NewDocumentBuilder (); Dokument doc = builder.parse (nový súbor ("src / test / resources / example_jdom.xml")); doc.getDocumentElement (). normalize ();

Vo vyššie uvedenom príklade najskôr získame inštanciu DocumentBuilder triedy, potom použite analyzovať () metóda na dokumente XML na získanie a Dokument objekt, ktorý ju predstavuje.

Musíme tiež použiť normalizovať () metóda, ktorá zabezpečí, že hierarchiu dokumentov neovplyvnia žiadne ďalšie medzery ani nové riadky v uzloch.

4. Analýza domény

Poďme teraz preskúmať náš súbor XML.

Začnime načítaním všetkých prvkov so značkou „tutorial“. Môžeme to urobiť pomocou getElementsByTagName () metóda, ktorá vráti a NodeList:

@Test public void whenGetElementByTag_thenSuccess () {NodeList nodeList = doc.getElementsByTagName ("návod"); Uzol prvý = nodeList.item (0); assertEquals (4, nodeList.getLength ()); assertEquals (Node.ELEMENT_NODE, first.getNodeType ()); assertEquals ("tutorial", first.getNodeName ()); }

Je dôležité si to uvedomiť Uzol je primárny údajový typ pre komponenty DOM. Všetky prvky, atribúty, text sa považujú za uzly.

Ďalej sa pozrime, ako môžeme získať atribúty prvého prvku getAttributes ():

@Test public void whenGetFirstElementAttributes_thenSuccess () {Uzol prvý = doc.getElementsByTagName ("návod"). Item (0); NamedNodeMap attrList = first.getAttributes (); assertEquals (2, attrList.getLength ()); assertEquals ("tutId", attrList.item (0) .getNodeName ()); assertEquals ("01", attrList.item (0) .getNodeValue ()); assertEquals ("typ", attrList.item (1) .getNodeName ()); assertEquals ("java", attrList.item (1) .getNodeValue ()); }

Tu dostaneme NamedNodeMap objekt, potom použite položka (index) metóda na získanie každého uzla.

Pre každý uzol môžeme použiť getNodeName () a getNodeValue () nájsť ich atribúty.

5. Traversing Nodes

Ďalej sa pozrime, ako prechádzať uzlami DOM.

V nasledujúcom teste prejdeme podradené uzly prvého prvku a vytlačíme ich obsah:

@Test public void whenTraverseChildNodes_thenSuccess () {Uzol prvý = doc.getElementsByTagName ("tutoriál"). Item (0); NodeList nodeList = first.getChildNodes (); int n = nodeList.getLength (); Prúd uzla; pre (int i = 0; i

Najprv dostaneme NodeList pomocou getChildNodes () metódou, potom ju iterujte a vytlačte názov uzla a textový obsah.

Výstup zobrazí obsah prvého prvku „tutoriálu“ v našom dokumente:

názov: Guava description: Introduction to Guava date: 04/04/2016 autor: GuavaAuthor

6. Úprava DOM

Môžeme tiež vykonať zmeny v DOM.

Ako príklad zmeňme hodnotu parametra typu atribút od „java“ po „iný“:

@Test public void whenModifyDocument_thenModified () {NodeList nodeList = doc.getElementsByTagName ("tutoriál"); Prvý prvok = (Element) nodeList.item (0); assertEquals ("java", first.getAttribute ("typ")); first.setAttribute ("type", "other"); assertEquals ("other", first.getAttribute ("type")); }

V tomto prípade je zmena hodnoty atribútu jednoduchá záležitosť volania znaku Element‘S setAttribute () metóda.

7. Vytvorenie nového dokumentu

Okrem úpravy modelu DOM môžeme vytvárať aj nové dokumenty XML od nuly.

Najprv sa pozrime na súbor, ktorý chceme vytvoriť:

   [chránené e-mailom] 

Náš XML obsahuje a používateľov koreňový uzol s jedným používateľ prvok, ktorý má aj podradený uzol e-mail.

Aby sme to dosiahli, musíme najskôr zavolať Staviteľ‘S novýDokument () metóda, ktorá vracia a Dokument objekt.

Potom zavoláme createElement () metóda nového objektu:

@ Test public void whenCreateNewDocument_thenCreated () vyvolá výnimku {Document newDoc = builder.newDocument (); Root prvku = newDoc.createElement ("používatelia"); newDoc.appendChild (root); Prvok prvý = newDoc.createElement ("užívateľ"); root.appendChild (prvý); first.setAttribute ("id", "1"); Element email = newDoc.createElement ("email"); email.appendChild (newDoc.createTextNode ("[chránený e-mailom]")); first.appendChild (e-mail); assertEquals (1, newDoc.getChildNodes (). getLength ()); assertEquals ("users", newDoc.getChildNodes (). item (0) .getNodeName ()); }

Ak chcete pridať každý prvok do DOM, voláme tiež appendChild () metóda.

8. Uloženie dokumentu

Po úprave nášho dokumentu alebo jeho vytvorení úplne od začiatku ho budeme musieť uložiť do súboru.

Začneme vytvorením DOMSource objekt, potom použite jednoduchý Transformátor uloženie dokumentu do súboru:

private void saveDomToFile (dokumentový dokument, reťazec fileName) vyvolá výnimku {DOMSource dom = nový DOMSource (dokument); Transformátor transformátor = TransformerFactory.newInstance () .newTransformer (); Výsledok StreamResult = nový StreamResult (nový súbor (názov súboru)); transformátor.transformácia (dom, výsledok); }

Podobne môžeme náš dokument vytlačiť v konzole:

private void printDom (dokumentový dokument) vyvolá výnimku {DOMSource dom = nový DOMSource (dokument); Transformátor transformátor = TransformerFactory.newInstance () .newTransformer (); transformer.transform (dom, nový StreamResult (System.out)); }

9. Záver

V tomto rýchlom článku sme sa naučili, ako používať syntaktický analyzátor Xerces DOM na vytváranie, úpravu a ukladanie dokumentu XML.

Úplný zdrojový kód príkladov je ako vždy k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found