Oglas

Bi se radi naučili brati in pisati datoteko XML iz java?

datoteke XML Kaj je datoteka XML in kako jo lahko odprete in uporabite?Morda ste že videli izraz »XML«. Morda ste celo pomotoma odprli datoteko XML. Kaj je XML in kako ga uporabljate? Preberi več se uporabljajo za različne namene, vključno s shranjevanjem podatkov. Preden je JSON postal priljubljen, je bil XML prednostna oblika za predstavljanje, shranjevanje in prenašanje strukturiranih podatkov. Čeprav je priljubljenost XML v zadnjih letih oslabila, se lahko z njim občasno srečate, zato je pomembno, da se iz kode naučite delati z njim.

Java standardna izdaja (SE) 10 temeljnih konceptov Java, ki se jih morate naučiti, ko začneteNe glede na to, ali pišete GUI, razvijate programsko opremo na strani strežnika ali mobilno aplikacijo z uporabo Androida, vam bo učenje Jave dobro služilo. Tukaj je nekaj osnovnih konceptov Java, ki vam bodo pomagali začeti. Preberi več vključuje Java API za obdelavo XML (JAXP), ki je krovni izraz, ki pokriva večino vidikov obdelave XML. Tej vključujejo:

  • DOM: Objektni model dokumenta vključuje razrede za delo z artefakti XML, kot so element, vozlišče, atributi itd. DOM API naloži celoten dokument XML v pomnilnik za obdelavo, zato ni zelo primeren za delo z velikimi datotekami XML.
  • SAX: Simple API za XML je algoritem za branje XML, ki temelji na dogodkih. Tukaj se XML obdeluje s sprožitvijo dogodkov, najdenih pri branju XML. Zahteve po pomnilniku za uporabo te metode so nizke, vendar je delo z API-jem bolj zapleteno kot delo z DOM.
  • StaX: API za pretakanje za XML je nedavni dodatek k API-jem XML in zagotavlja visoko zmogljivo filtriranje tokov, obdelavo in spreminjanje XML. Čeprav se izogne ​​nalaganju celotnega dokumenta XML v pomnilnik, ponuja arhitekturo vlečnega tipa kot arhitektura, ki temelji na dogodkih, zato je aplikacijo lažje kodirati in razumeti kot z uporabo SAX API.

V tem članku uporabljamo DOM API pokazati, kako brati in pisati datoteke XML iz java. V prihodnjih člankih bomo obravnavali druga dva API-ja.

Vzorčna datoteka XML

Za namen tega članka prikazujemo koncepte z uporabo naslednjega vzorca XML, ki ga lahko najdete tukaj:

 1.0?>Gambardella, MatejPriročnik za razvijalce XML
Računalnik44.952000-10-01Poglobljen pogled na ustvarjanje aplikacij z XML.Ralls, Kim... 

Branje datoteke XML

Oglejmo si osnovne korake, potrebne za branje datoteke XML z uporabo API-ja DOM.

Prvi korak je pridobiti primer Graditelj dokumentov. Graditelj se uporablja za razčlenitev dokumentov XML. Za osnovno uporabo naredimo takole:

Tovarna DocumentBuilderFactory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware (false); factory.setValidating (false); Graditelj dokumentov = factory.newDocumentBuilder(); 

Zdaj lahko naložimo celoten dokument v pomnilnik, začenši s korenskim elementom XML. V našem primeru je to katalog element.

Datoteka =...; // Datoteka XML za branje. Dokument dokumenta = builder.parse (datoteka); Katalog elementov = document.getDocumentElement(); 

In to je to, ljudje! DOM API za branje XML je zelo preprost. Zdaj imate dostop do celotnega dokumenta XML, začenši od njegovega korenskega elementa, katalog. Poglejmo zdaj, kako delati z njim.

Uporaba API-ja DOM

Zdaj, ko imamo koren XML Element, lahko uporabimo DOM API za pridobivanje zanimivih koščkov informacij.

Pridobite vse knjiga podrejenih elementov korenskega elementa in zanko nad njimi. Upoštevajte, da getChildNodes() vrne vse otroci, vključno z besedilom, komentarji itd. Za naš namen potrebujemo samo otroške elemente, zato preskočimo druge.

NodeList books = catalog.getChildNodes(); za (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Vozlišče. ELEMENT_VODE ) nadaljevanje; Knjiga elementov = (Element) otrok; // delajte s knjigo Element tukaj. }

Kako najdete določen podrejeni element glede na starša? Naslednja statična metoda vrne prvi ujemajoči se element, če ga najdemo, ali nič. Kot lahko vidite, postopek vključuje pridobivanje seznama podrejenih vozlišč in zanko skozi njih ter izbiranje vozlišč elementov z določenim imenom.

statično zasebno vozlišče findFirstNamedElement (nadrejeno vozlišče, ime oznake niza) { NodeList Children = parent.getChildNodes(); for (int i = 0, in = children.getLength(); i < v; i++) { Node child = children.item (i); if ( child.getNodeType() != Vozlišče. ELEMENT_VODE ) nadaljevanje; if ( child.getNodeName().equals (tagName) ) vrni otroka; } vrni null; }

Upoštevajte, da DOM API obravnava besedilno vsebino znotraj elementa kot ločeno vozlišče tipa TEXT_VODE. Poleg tega je lahko vsebina besedila razdeljena na več sosednjih besedilnih vozlišč. Zato je za pridobitev vsebine besedila v elementu potrebna naslednja posebna obdelava.

statični zasebni niz getCharacterData (nadrejeno vozlišče) { StringBuilder text = new StringBuilder(); if ( parent == null ) vrni text.toString(); Otroci seznama vozlišč = parent.getChildNodes(); za (int k = 0, kn = children.getLength(); k < kn; k++) { Node child = children.item (k); if ( child.getNodeType() != Vozlišče. TEXT_VODE ) prelom; text.append (child.getNodeValue()); } vrni besedilo.toString(); }

Oboroženi s temi priročnimi funkcijami, si zdaj poglejmo nekaj kode za naštevanje nekaterih informacij iz našega vzorčnega XML-ja. Za vsako knjigo želimo prikazati podrobne informacije, kot so na voljo v knjižnem katalogu.

NodeList books = catalog.getChildNodes(); za (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Vozlišče. ELEMENT_VODE ) nadaljevanje; Knjiga elementov = (Element) otrok; ii++; ID niza = book.getAttribute("id"); Avtor niza = getCharacterData (findFirstNamedElement (child,"author")); Naslov niza = getCharacterData (findFirstNamedElement (child,"title")); Zvrst niza = getCharacterData (findFirstNamedElement (child,"genre")); Cena niza = getCharacterData (findFirstNamedElement (child,"price")); String pubdate = getCharacterData (findFirstNamedElement (child,"pubdate")); String descr = getCharacterData (findFirstNamedElement (child,"description")); System.out.printf("%3d. id knjige = %s\n" + " avtor: %s\n" + " naslov: %s\n" + " žanr: %s\n" + " cena: %s\n" + " datum objave: %s \n" + " descr: %s\n", ii, id, avtor, naslov, žanr, cena, izdaja, descr); }

Pisanje izhoda XML

Java ponuja API za pretvorbo XML za preoblikovanje podatkov XML. Ta API uporabljamo z preoblikovanje identitete za ustvarjanje izhoda.

Kot primer dodajmo novo knjiga element v vzorčnem katalogu, predstavljenem zgoraj. Podrobnosti o knjigi (npr avtor, naslovitd.) je mogoče pridobiti zunaj, morda iz datoteke lastnosti ali baze podatkov. Za nalaganje podatkov uporabljamo naslednjo datoteko lastnosti.

id=bk113. avtor=Jane Austen. title=Ponos in predsodki. žanr=Romantika. cena=6,99. publish_date=2010-04-01. description="Splošno priznana resnica je, da samski moški, ki ima veliko bogastvo, mora imeti pomanjkanje žene." Tako se začne Pride in Prejudice, duhovita komedija vedenja Jane Austen – eden najbolj priljubljenih romanov vseh časov – ki prikazuje čudovito civilizirane spopade med ponosni gospod Darcy in predsodka Elizabeth Bennet, ko igrata svoje živahno dvorjenje v seriji salonov iz osemnajstega stoletja spletke. 

Prvi korak je razčlenitev obstoječe datoteke XML z uporabo zgoraj predstavljene metode. Koda je prikazana tudi spodaj.

Datoteka =...; // Datoteka XML za branje. Dokument dokumenta = builder.parse (datoteka); Katalog elementov = document.getDocumentElement(); 

Podatke iz datoteke lastnosti naložimo s pomočjo Lastnosti razred, ki je na voljo z java. Koda je precej preprosta in prikazana spodaj.

String propsFile =...; Lastnosti props = nove lastnosti(); poskusite (FileReader in = new FileReader (propsFile)) { props.load (in); }

Ko so lastnosti naložene, pridobimo vrednosti, ki jih želimo dodati iz datoteke lastnosti.

ID niza = props.getProperty("id"); Avtor niza = props.getProperty("avtor"); Naslov niza = props.getProperty("naslov"); Zvrst niza = props.getProperty("genre"); Cena niza = props.getProperty("cena"); Niz datum_objave = props.getProperty("datum_objave"); String descr = props.getProperty("opis"); 

Zdaj ustvarimo prazno knjiga element.

Knjiga elementov = document.createElement("knjiga"); book.setAttribute("id", id); 

Dodajanje podrejenih elementov v knjiga je trivialno. Za udobje zberemo zahtevana imena elementov v a Seznam in dodaj vrednosti v zanki.

Seznamelnames =Arrays.asList("avtor", "naslov", "zvrst", "cena", "datum_objave", "opis"); for (String elname: elnames) { Element el = document.createElement (elname); Besedilo besedila = document.createTextNode (props.getProperty (elname)); el.appendChild (besedilo); book.appendChild (el); } catalog.appendChild (knjiga);

In tako se to naredi. The katalog element ima zdaj novo knjiga dodan element. Vse, kar ostane zdaj, je napisati posodobljeni XML.

Za pisanje XML potrebujemo primerek transformator ki je ustvarjen, kot je prikazano spodaj. Upoštevajte, da zahtevamo zamik izhodnega XML-ja z uporabo setOutputProperty() metoda.

TransformerFactory tfact = TransformerFactory.newInstance(); Transformator tform = tfact.newTransformer(); tform.setOutputProperty (OutputKeys. alineja, "da"); tform.setOutputProperty("{ http://xml.apache.org/xslt}indent-amount", "3"); 

Zadnji korak pri generiranju izhoda XML je uporaba transformacije. Rezultat se prikaže v izhodnem toku, Sistem.out.

tform.transform (nov DOMSource (dokument), nov StreamResult (System.out)); 

Če želite zapisati izhod neposredno v datoteko, uporabite naslednje.

tform.transform (nov DOMSource (dokument), nov StreamResult (nova datoteka("output.xml"))); 

In to zaključuje ta članek o branju in pisanju datotek XML z uporabo API-ja DOM.

Ali ste v svojih aplikacijah uporabljali DOM API? Kako se je izkazalo? Sporočite nam v spodnjih komentarjih.