Publicitate

Doriți să învățați cum să citiți și să scrieți un fișier XML din java?

fișiere XML Ce este un fișier XML și cum îl puteți deschide și utiliza?Este posibil să fi văzut termenul „XML”. S-ar putea chiar să fi deschis accidental un fișier XML. Ce este XML și cum îl folosești? Citeste mai mult sunt utilizate pentru o varietate de scopuri, inclusiv stocarea datelor. Înainte ca JSON să devină popular, XML era formatul preferat pentru reprezentarea, stocarea și transportul datelor structurate. Chiar dacă popularitatea XML a scăzut în ultimii ani, este posibil să îl întâlniți ocazional, așa că este important să învățați cum să lucrați cu el din cod.

Java Standard Edition (SE) 10 concepte de bază Java pe care ar trebui să le învățați când începețiIndiferent dacă scrieți o interfață grafică, dezvoltați software pe partea de server sau o aplicație mobilă folosind Android, învățarea Java vă va fi de folos. Iată câteva concepte de bază Java pentru a vă ajuta să începeți. Citeste mai mult include cele

instagram viewer
API Java pentru procesare XML (JAXP), care este un termen umbrelă care acoperă majoritatea aspectelor procesării XML. Acestea includ:

  • DOM: Document Object Model include clase pentru lucrul cu artefacte XML, cum ar fi element, nod, atribute etc. API-ul DOM încarcă documentul XML complet în memorie pentru procesare, deci nu este foarte potrivit pentru lucrul cu fișiere XML mari.
  • SAX: Simplu API pentru XML este un algoritm bazat pe evenimente pentru citirea XML. Aici XML este procesat prin declanșarea evenimentelor găsite la citirea XML. Cerințele de memorie pentru utilizarea acestei metode sunt reduse, dar lucrul cu API-ul este mai complex decât lucrul cu DOM.
  • StaX: API-ul Streaming pentru XML este o adăugare recentă la API-urile XML și oferă filtrare, procesare și modificare de înaltă performanță a fluxului XML. În timp ce evită încărcarea întregului document XML în memorie, oferă mai degrabă o arhitectură de tip pull decât o arhitectură bazată pe evenimente, astfel încât aplicația este mai ușor de codificat și de înțeles decât folosind SAX API.

În acest articol, folosim API-ul DOM pentru a demonstra cum să citiți și să scrieți fișiere XML din java. Vom acoperi celelalte două API-uri în articolele viitoare.

Un exemplu de fișier XML

În scopul acestui articol, demonstrăm conceptele folosind următorul exemplu XML, care poate fi găsit Aici:

 1.0?>Gambardella, MateiGhidul dezvoltatorului XML
Calculator44.952000-10-01O privire aprofundată asupra creării de aplicații cu XML.Ralls, Kim... 

Citirea unui fișier XML

Să ne uităm la pașii de bază necesari pentru citirea unui fișier XML folosind API-ul DOM.

Primul pas este să obțineți o instanță a DocumentBuilder. Generatorul este folosit pentru a analiza documente XML. Pentru utilizarea de bază, procedăm astfel:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware (fals); factory.setValidating (fals); DocumentBuilder builder = factory.newDocumentBuilder(); 

Acum putem încărca întregul document în memorie pornind de la elementul rădăcină XML. În exemplul nostru, este catalog element.

Fișier =...; // Fișier XML de citit. Document document = builder.parse (fișier); Catalog de elemente = document.getDocumentElement(); 

Și asta e, oameni buni! API-ul DOM pentru citirea unui XML este foarte simplu. Acum aveți acces la întregul document XML începând de la elementul său rădăcină, catalog. Să vedem acum cum să lucrăm cu el.

Folosind API-ul DOM

Acum că avem rădăcina XML Element, putem folosi API-ul DOM pentru a extrage pepite interesante de informații.

Ia toate carte copiii elementului rădăcină și treceți peste ei. Rețineți că getChildNodes() se intoarce toate copii, inclusiv text, comentarii etc. Pentru scopul nostru, avem nevoie doar de elementele copil, așa că trecem peste celelalte.

NodeList books = catalog.getChildNodes(); pentru (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Nodul copil = carti.item (i); if ( child.getNodeType() != Nod. ELEMENT_NODE ) continua; Cartea elementului = (Element) copil; // lucrați cu cartea Element aici. }

Cum găsești un anumit element copil, dat fiind părintele? Următoarea metodă statică returnează primul element care se potrivește dacă este găsit sau nul. După cum puteți vedea, procedura implică obținerea listei de noduri copii și trecerea în buclă prin ele, alegerea nodurilor element cu numele specificat.

static privat Node findFirstNamedElement (părinte nod, String tagName) { NodeList copii = parent.getChildNodes(); pentru (int i = 0, in = children.getLength(); i < în; i++) { Nodul copil = copii.item (i); if ( child.getNodeType() != Nod. ELEMENT_NODE ) continua; if ( child.getNodeName().equals (tagName) ) return child; } returnează nul; }

Rețineți că API-ul DOM tratează conținutul text dintr-un element ca un nod separat de tip TEXT_NODE. În plus, conținutul textului poate fi împărțit în mai multe noduri de text adiacente. Deci următoarea procesare specială este necesară pentru a prelua conținutul textului dintr-un element.

String privat static getCharacterData (părinte nod) { StringBuilder text = new StringBuilder(); if ( parent == null ) return text.toString(); NodeList copii = parent.getChildNodes(); pentru (int k = 0, kn = children.getLength(); k < kn; k++) { Nodul copil = copii.item (k); if ( child.getNodeType() != Nod. TEXT_NODE ) pauză; text.append (child.getNodeValue()); } return text.toString(); }

Înarmați cu aceste funcții comode, să ne uităm acum la un cod pentru a enumera câteva informații din exemplul nostru de XML. Am dori să arătăm informații detaliate pentru fiecare carte, cum ar fi disponibile într-un catalog de cărți.

NodeList books = catalog.getChildNodes(); pentru (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Nodul copil = carti.item (i); if ( child.getNodeType() != Nod. ELEMENT_NODE ) continua; Cartea elementului = (Element) copil; ii++; String id = book.getAttribute("id"); String author = getCharacterData (findFirstNamedElement (copil,„autor”)); String title = getCharacterData (findFirstNamedElement (copil,"titlu")); String genre = getCharacterData (findFirstNamedElement (copil,"gen")); String price = getCharacterData (findFirstNamedElement (copil, „preț”)); String pubdate = getCharacterData (findFirstNamedElement (copil,"pubdate")); String descr = getCharacterData (findFirstNamedElement (copil, „descriere”)); System.out.printf("%3d. ID carte = %s\n" + " autor: %s\n" + " titlu: %s\n" + " gen: %s\n" + " preț: %s\n" + " pubdate: %s \n" + " descr: %s\n", ii, id, autor, titlu, gen, preț, pubdate, descr); }

Scrierea ieșirii XML

Java oferă XML Transform API pentru a transforma datele XML. Folosim acest API cu transformarea identităţii pentru a genera ieșire.

Ca exemplu, să adăugăm un nou carte element la catalogul eșantion prezentat mai sus. Detaliile cărții (cum ar fi autor, titlu, etc) pot fi obținute extern, poate dintr-un fișier de proprietăți sau dintr-o bază de date. Folosim următorul fișier de proprietăți pentru a încărca datele.

id=bk113. autor=Jane Austen. title=Mândrie și prejudecăți. gen=Romantic. pret=6,99. publish_date=2010-04-01. description="Este un adevăr universal recunoscut că un bărbat singur care deține o avere bună trebuie să aibă nevoie de o soție." Așa începe Mândria și Prejudecăți, comedia plină de spirit a lui Jane Austen - unul dintre cele mai populare romane din toate timpurile - care prezintă o luptă splendid civilizată între mândru domnul Darcy și prejudecata Elizabeth Bennet în timp ce își desfășoară curte plină de spirit într-o serie de salonuri din secolul al XVIII-lea intrigi. 

Primul pas este să analizați fișierul XML existent folosind metoda prezentată mai sus. Codul este de asemenea prezentat mai jos.

Fișier =...; // Fișier XML de citit. Document document = builder.parse (fișier); Catalog de elemente = document.getDocumentElement(); 

Încărcăm datele din fișierul de proprietăți folosind Proprietăți clasă prevăzută cu java. Codul este destul de simplu și este prezentat mai jos.

String propsFile =...; Proprietăți props = new Properties(); try (FileReader in = new FileReader (propsFile)) { props.load (in); }

Odată ce proprietățile sunt încărcate, recuperăm valorile pe care vrem să le adăugăm din fișierul de proprietăți.

String id = props.getProperty("id"); String author = props.getProperty(„autor”); String title = props.getProperty("titlu"); String gen = props.getProperty("gen"); String price = props.getProperty(„preț”); String publish_date = props.getProperty("publish_date"); String descr = props.getProperty(„descriere”); 

Să creăm acum un gol carte element.

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

Adăugarea elementelor copil la carte este banal. Pentru comoditate, colectăm numele elementelor necesare în a Listă și adăugați valorile într-o buclă.

Listăelnames =Arrays.asList(„autor”, „titlu”, „gen”, „preț”, „data_publicare”, „descriere”); for (String elname: elnames) { Element el = document.createElement (elname); Text text = document.createTextNode (props.getProperty (elname)); el.appendChild (text); book.appendChild (el); } catalog.appendChild (carte);

Și așa se face. The catalog elementul are acum noul carte element adăugat. Tot ce rămâne acum este să scrieți XML-ul actualizat.

Pentru a scrie XML, avem nevoie de o instanță de Transformator care este creat după cum se arată mai jos. Rețineți că solicităm indentarea fișierului XML de ieșire folosind codul setOutputProperty() metodă.

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

Ultimul pas în generarea rezultatului XML este aplicarea transformării. Rezultatul apare pe fluxul de ieșire, System.out.

tform.transform (nou DOMSource (document), nou StreamResult (System.out)); 

Pentru a scrie rezultatul direct într-un fișier, utilizați următoarele.

tform.transform (nou DOMSource (document), nou StreamResult (nou Fișier ("output.xml"))); 

Și asta încheie acest articol despre citirea și scrierea fișierelor XML folosind API-ul DOM.

Ați folosit API-ul DOM în aplicațiile dvs.? Cum a funcționat? Vă rugăm să ne anunțați în comentariile de mai jos.