Reklama

Chceli by ste sa naučiť čítať a zapisovať XML súbor z javy?

XML súbory Čo je súbor XML a ako ho môžete otvoriť a použiť?Možno ste už videli výraz „XML“. Možno ste dokonca omylom otvorili súbor XML. Čo je XML a ako ho používate? Čítaj viac sa používajú na rôzne účely vrátane ukladania údajov. Predtým, ako sa JSON stal populárnym, bol XML preferovaným formátom na reprezentáciu, ukladanie a prenos štruktúrovaných údajov. Aj keď popularita XML v posledných rokoch klesá, občas sa s ním môžete stretnúť, preto je dôležité naučiť sa s ním pracovať z kódu.

Java Standard Edition (SE) 10 základných konceptov Java, ktoré by ste sa mali naučiť, keď začínateČi už píšete grafické používateľské rozhranie, vyvíjate softvér na strane servera alebo mobilnú aplikáciu používajúcu Android, učenie sa jazyka Java vám dobre poslúži. Tu je niekoľko základných konceptov Java, ktoré vám pomôžu začať. Čítaj viac zahŕňa Java API pre spracovanie XML (JAXP), čo je zastrešujúci pojem pokrývajúci väčšinu aspektov spracovania XML. Tie obsahujú:

instagram viewer
  • DOM: Objektový model dokumentu obsahuje triedy na prácu s artefaktmi XML, ako sú element, uzol, atribúty atď. DOM API načíta kompletný XML dokument do pamäte na spracovanie, takže nie je veľmi vhodné na prácu s veľkými XML súbormi.
  • SAX: Simple API for XML je udalosťami riadený algoritmus na čítanie XML. Tu je XML spracované spúšťaním udalostí nájdených pri čítaní XML. Požiadavky na pamäť pri používaní tejto metódy sú nízke, ale práca s API je zložitejšia ako práca s DOM.
  • StAX: Streaming API for XML je najnovším prírastkom k XML API a poskytuje vysokovýkonné filtrovanie toku, spracovanie a modifikáciu XML. Aj keď sa vyhýba načítaniu celého dokumentu XML do pamäte, poskytuje skôr architektúru typu pull ako udalosťami riadená architektúra, takže aplikácia je ľahšie kódovateľná a zrozumiteľná ako používanie SAX API.

V tomto článku používame DOM API ukázať, ako čítať a zapisovať súbory XML z jazyka Java. Ďalším dvom rozhraniam API sa budeme venovať v budúcich článkoch.

Vzorový súbor XML

Na účely tohto článku demonštrujeme koncepty pomocou nasledujúceho vzorového XML, ktorý možno nájsť tu:

 1.0?>Gambardella, MatúšXML Developer's Guide
Počítač44.952000-10-01Podrobný pohľad na vytváranie aplikácií pomocou XML.Ralls, Kim... 

Čítanie súboru XML

Pozrime sa na základné kroky potrebné na čítanie súboru XML pomocou DOM API.

Prvým krokom je získanie inštancie DocumentBuilder. Builder sa používa na analýzu dokumentov XML. Pre základné použitie to robíme takto:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware (false); factory.setValidating (false); tvorca DocumentBuilder = factory.newDocumentBuilder(); 

Teraz môžeme načítať celý dokument do pamäte počnúc koreňovým prvkom XML. V našom príklade je to katalóg element.

Súbor súboru =...; // XML súbor na čítanie. Dokument dokumentu = builder.parse (súbor); Katalóg prvkov = document.getDocumentElement(); 

A je to, ľudia! DOM API na čítanie XML je naozaj jednoduché. Teraz máte prístup k celému dokumentu XML počnúc jeho koreňovým prvkom, katalóg. Poďme sa teraz pozrieť, ako s tým pracovať.

Použitie DOM API

Teraz, keď máme koreň XML Element, môžeme použiť DOM API na extrahovanie zaujímavých zrniek informácií.

Získajte všetky kniha deti koreňového prvku a slučka nad nimi. Poznač si to getChildNodes() sa vracia všetky deti vrátane textu, komentárov a pod. Pre náš účel potrebujeme len detské prvky, takže ostatné preskočíme.

NodeList books = Catalog.getChildNodes(); for (int i = 0, ii = 0, n = knihy.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Uzol. ELEMENT_NODE ) pokračovať; Kniha elementov = (Element) dieťa; // tu pracujte s knihou Element. }

Ako nájdete konkrétny podradený prvok vzhľadom na rodiča? Nasledujúca statická metóda vráti prvý zodpovedajúci prvok, ak sa nájde, alebo hodnotu null. Ako môžete vidieť, postup zahŕňa získanie zoznamu podriadených uzlov a ich precyklenie a výber uzlov prvkov so zadaným názvom.

statický súkromný uzol findFirstNamedElement (rodič uzla, reťazec tagName) { NodeList children = parent.getChildNodes(); for (int i = 0, in = deti.getLength(); i < in; i++) { Node child = children.item (i); if ( child.getNodeType() != Uzol. ELEMENT_NODE ) pokračovať; if ( child.getNodeName().equals (tagName) ) return child; } return null; }

Všimnite si, že DOM API zaobchádza s textovým obsahom v rámci prvku ako so samostatným uzlom typu TEXT_NODE. Okrem toho môže byť textový obsah rozdelený do viacerých susedných textových uzlov. Na získanie textového obsahu v rámci prvku je teda potrebné nasledujúce špeciálne spracovanie.

statický súkromný reťazec getCharacterData (rodič uzla) { StringBuilder text = new StringBuilder(); if ( parent == null ) return text.toString(); NodeList deti = parent.getChildNodes(); for (int k = 0, kn = deti.getDlzka(); k < kn; k++) { Node child = children.item (k); if ( child.getNodeType() != Uzol. TEXT_NODE ) break; text.append (child.getNodeValue()); } return text.toString(); }

Vyzbrojení týmito praktickými funkciami sa teraz pozrime na nejaký kód na výpis niektorých informácií z nášho vzorového XML. Radi by sme zobrazili podrobné informácie o každej knihe, aké by boli dostupné v katalógu kníh.

NodeList books = Catalog.getChildNodes(); for (int i = 0, ii = 0, n = knihy.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Uzol. ELEMENT_NODE ) pokračovať; Kniha elementov = (Element) dieťa; ii++; String id = book.getAttribute("id"); Autor reťazca = getCharacterData (findFirstNamedElement (child,"author")); Názov reťazca = getCharacterData (findFirstNamedElement (child,"title")); String žáner = getCharacterData (findFirstNamedElement (child,"genre")); String price = getCharacterData (findFirstNamedElement (dieťa,"price")); String pubdate = getCharacterData (findFirstNamedElement (child,"pubdate")); String descr = getCharacterData (findFirstNamedElement (child,"popis")); System.out.printf("%3d. id knihy = %s\n" + " autor: %s\n" + " názov: %s\n" + " žáner: %s\n" + " cena: %s\n" + " dátum vydania: %s \n" + " popis: %s\n", ii, id, autor, názov, žáner, cena, dátum vydania, popis); }

Zápis XML výstupu

Java poskytuje XML Transform API na transformáciu údajov XML. Toto API používame s transformácia identity na generovanie výstupu.

Ako príklad uveďme nový kniha prvok do vzorového katalógu uvedeného vyššie. Podrobnosti o knihe (ako napr autora, titul, atď.) možno získať externe, napríklad zo súboru vlastností alebo databázy. Na načítanie údajov používame nasledujúci súbor vlastností.

id=bk113. autorka=Jane Austenová. názov = Pýcha a predsudok. žáner = romantika. cena = 6,99. publish_date=2010-04-01. description="Je všeobecne uznávanou pravdou, že slobodný muž, ktorý má veľké bohatstvo, musí mať nedostatok manželky." Tak začína Pride a Predsudok, vtipná komédia o spôsoboch Jane Austenovej – jeden z najpopulárnejších románov všetkých čias –, v ktorom sa objavujú skvele civilizované súboje medzi hrdý pán Darcy a zaujatá Elizabeth Bennet, keď hrajú svoje temperamentné dvorenie v sérii salónov z 18. storočia intrigy. 

Prvým krokom je analyzovať existujúci súbor XML pomocou metódy uvedenej vyššie. Kód je tiež zobrazený nižšie.

Súbor súboru =...; // XML súbor na čítanie. Dokument dokumentu = builder.parse (súbor); Katalóg prvkov = document.getDocumentElement(); 

Údaje zo súboru vlastností načítame pomocou Vlastnosti trieda vybavená java. Kód je pomerne jednoduchý a je zobrazený nižšie.

String propsFile =...; Vlastnosti rekvizity = new Properties(); try (FileReader in = new FileReader (propsFile)) { props.load (in); }

Po načítaní vlastností získame hodnoty, ktoré chceme pridať, zo súboru vlastností.

String id = props.getProperty("id"); Autor reťazca = props.getProperty("autor"); String title = props.getProperty("title"); String žáner = props.getProperty("genre"); String price = props.getProperty("price"); String dátum_zverejnenia = props.getProperty("dátum_zverejnenia"); String descr = props.getProperty("popis"); 

Teraz vytvoríme prázdnotu kniha element.

Element kniha = document.createElement("kniha"); book.setAttribute("id", id); 

Pridanie podradených prvkov do kniha je triviálne. Pre pohodlie zhromažďujeme požadované názvy prvkov v a Zoznam a pridajte hodnoty v slučke.

Zoznamelnames =Arrays.asList("autor", "názov", "žáner", "cena", "dátum_zverejnenia", "popis"); for (String elname: elnames) { Element el = document.createElement (elname); Text textu = document.createTextNode (props.getProperty (elname)); el.appendChild (text); book.appendChild (el); } katalóg.appendDieťa (kniha);

A takto sa to robí. The katalóg prvok má teraz nový kniha pridaný prvok. Teraz zostáva už len vypísať aktualizované XML.

Na písanie XML potrebujeme inštanciu Transformátor ktorý je vytvorený ako je uvedené nižšie. Všimnite si, že požadujeme odsadenie výstupného XML pomocou setOutputProperty() metóda.

TransformerFactory tfact = TransformerFactory.newInstance(); Transformátor tform = tfact.newTransformer(); tform.setOutputProperty (OutputKeys. INDENT, "áno"); tform.setOutputProperty("{ http://xml.apache.org/xslt}indent-amount", "3"); 

Posledným krokom pri generovaní výstupu XML je použitie transformácie. Výsledok sa zobrazí vo výstupnom toku, System.out.

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

Ak chcete zapísať výstup priamo do súboru, použite nasledujúce.

tform.transform (nový DOMSource (dokument), nový StreamResult (nový File("output.xml"))); 

A to uzatvára tento článok o čítaní a písaní súborov XML pomocou rozhrania DOM API.

Použili ste DOM API vo svojich aplikáciách? Ako to fungovalo? Dajte nám vedieť v komentároch nižšie.