Reklaam
Kas soovite õppida, kuidas java-st XML-faili lugeda ja kirjutada?
XML-failid Mis on XML-fail ja kuidas seda avada ja kasutada?Võib-olla olete näinud terminit "XML". Võib-olla avasite kogemata XML-faili. Mis on XML ja kuidas seda kasutada? Loe rohkem kasutatakse erinevatel eesmärkidel, sealhulgas andmete salvestamiseks. Enne JSON-i populaarseks saamist oli XML eelistatud vorming struktureeritud andmete esitamiseks, salvestamiseks ja transportimiseks. Kuigi XML-i populaarsus on viimastel aastatel kahanenud, võite seda aeg-ajalt kohata, mistõttu on oluline õppida, kuidas sellega koodi abil töötada.
Java Standard Edition (SE) 10 põhilist Java kontseptsiooni, mida peaksite alustades õppimaOlenemata sellest, kas kirjutate GUI-d, arendate serveripoolset tarkvara või Androidi kasutavat mobiilirakendust, on Java õppimine teile kasulik. Siin on mõned Java põhikontseptsioonid, mis aitavad teil alustada. Loe rohkem sisaldab Java API XML-i töötlemiseks (JAXP), mis on katustermin, mis hõlmab enamikku XML-i töötlemise aspekte. Need sisaldavad:
- DOM: Dokumendiobjektimudel sisaldab klasse XML-i artefaktidega, nagu element, sõlm, atribuudid jne, töötamiseks. DOM API laadib töötlemiseks kogu XML-dokumendi mällu, seega ei sobi see eriti suurte XML-failidega töötamiseks.
- SAX: Simple API for XML on sündmustepõhine algoritm XML-i lugemiseks. Siin töödeldakse XML-i XML-i lugemisel leitud sündmuste käivitamisega. Selle meetodi kasutamise mälunõuded on väikesed, kuid API-ga töötamine on keerulisem kui DOM-iga töötamine.
- Stax: Streaming API for XML on XML API-de hiljutine täiendus ja pakub suure jõudlusega voogude filtreerimist, töötlemist ja XML-i muutmist. Kuigi see väldib kogu XML-dokumendi mällu laadimist, pakub see pigem pull-tüüpi arhitektuuri kui sündmustepõhine arhitektuur, nii et rakendust on lihtsam kodeerida ja mõista kui SAX-i kasutades API.
Selles artiklis kasutame DOM API demonstreerida, kuidas lugeda ja kirjutada java-st XML-faile. Kahte ülejäänud API-d käsitleme tulevastes artiklites.
XML-faili näidis
Selle artikli jaoks demonstreerime kontseptsioone, kasutades järgmist XML-i näidist, mille leiate siin:
1.0?>Gambardella, Matthew XML-i arendaja juhend
Arvuti 44.95 2000-10-01 Põhjalik ülevaade rakenduste loomisest XML-iga. Ralls, Kim ...
XML-faili lugemine
Vaatame põhitoiminguid, mis on vajalikud XML-faili lugemiseks DOM API abil.
Esimene samm on hankida näide DocumentBuilder. Koostajat kasutatakse XML-dokumentide sõelumiseks. Põhikasutuseks teeme seda järgmiselt:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware (vale); factory.setValidating (false); DocumentBuilder builder = factory.newDocumentBuilder();
Nüüd saame laadida kogu dokumendi mällu alates XML-i juurelemendist. Meie näites on see kataloog element.
Failifail =...; // XML-fail lugemiseks. Dokumendi dokument = builder.parse (fail); Elementide kataloog = document.getDocumentElement();
Ja kõik, inimesed! DOM-i API XML-i lugemiseks on väga lihtne. Nüüd on teil juurdepääs kogu XML-dokumendile alates selle juurelemendist, kataloog. Vaatame nüüd, kuidas sellega töötada.
DOM API kasutamine
Nüüd, kui meil on XML-juur Element, saame kasutada DOM API-d huvitavate teabetükkide eraldamiseks.
Hankige kõik raamat juurelemendi lapsed ja silmus nende kohal. Pange tähele, et getChildNodes() naaseb kõik lapsed, sealhulgas tekst, kommentaarid jne. Oma eesmärgi saavutamiseks vajame ainult alamelemente, seega jätame teised vahele.
NodeListi raamatud = catalog.getChildNodes(); for (int i = 0, ii = 0, n = raamatud.getLength(); i
Kuidas leida konkreetne alamelement, arvestades vanemat? Järgmine staatiline meetod tagastab leidmisel esimese sobiva elemendi või nulli. Nagu näete, hõlmab protseduur alamsõlmede loendi hankimist ja nende läbimist, valides välja määratud nimega elemendisõlmed.
staatiline privaatne sõlm findFirstNamedElement (sõlme vanem, stringi märgendi nimi) { NodeList children = parent.getChildNodes(); for (int i = 0, in = lapsed.getLength(); i < sisse; i++) { Sõlme laps = lapsed.üksus (i); if ( laps.getNodeType() != Sõlm. ELEMENT_SODE ) jätka; if ( child.getNodeName().equals (tagName) ) tagastab lapse; } return null; }
Pange tähele, et DOM API käsitleb elemendi tekstisisu eraldi tüübisõlmena TEXT_SODE. Lisaks võib teksti sisu jagada mitmeks külgnevaks tekstisõlmeks. Seega on elemendi tekstisisu toomiseks vajalik järgmine eritöötlus.
staatiline privaatne string getCharacterData (sõlme ülem) { StringBuilder text = new StringBuilder(); if ( vanem == null ) return text.toString(); NodeList lapsed = parent.getChildNodes(); for (int k = 0, kn = lapsed.getLength(); k < kn; k++) { Sõlme laps = lapsed.üksus (k); if ( laps.getNodeType() != Sõlm. TEXT_SODE ) murda; text.append (child.getNodeValue()); } return text.toString(); }
Nende mugavusfunktsioonidega relvastatud, vaatame nüüd mõnda koodi meie näidis-XML-i teabe loetlemiseks. Soovime näidata iga raamatu kohta üksikasjalikku teavet, mis on saadaval raamatukataloogis.
NodeListi raamatud = catalog.getChildNodes(); for (int i = 0, ii = 0, n = raamatud.getLength(); i
XML-väljundi kirjutamine
Java pakub XML-i teisenduse API XML-andmete teisendamiseks. Kasutame seda API-t koos identiteedi teisendus väljundi genereerimiseks.
Näiteks lisame uue raamat ülaltoodud näidiskataloogi. Raamatu üksikasjad (nt autor, pealkirijne) saab hankida väliselt, võib-olla atribuutide failist või andmebaasist. Kasutame andmete laadimiseks järgmist atribuutide faili.
id=bk113. autor=Jane Austen. title=Uhkus ja eelarvamus. žanr = romantika. hind = 6,99. avaldamise_kuupäev=2010-04-01. description="See on üldiselt tunnustatud tõde, et vallaline mees, kellel on õnn, peab otsima naist." Nii algab Pride ja Eelarvamus, Jane Austeni vaimukas komöödia komöödiast – üks kõigi aegade populaarsemaid romaane –, mis sisaldab suurepäraselt tsiviliseeritud sparringut uhke härra Darcy ja eelarvamuslik Elizabeth Bennet, kes mängivad oma meeleolukat kurameerimist kaheksateistkümnenda sajandi elutoa seerias intriigid.
Esimene samm on olemasoleva XML-faili sõelumine ülaltoodud meetodil. Kood on näidatud ka allpool.
Failifail =...; // XML-fail lugemiseks. Dokumendi dokument = builder.parse (fail); Elementide kataloog = document.getDocumentElement();
Laadime andmed atribuutide failist, kasutades Omadused klass varustatud javaga. Kood on üsna lihtne ja näidatud allpool.
String propsFile =...; Omadused props = new Properties(); proovima (FileReader in = new FileReader (propsFile)) { props.load (in); }
Kui atribuudid on laaditud, hangime atribuutide failist väärtused, mida tahame lisada.
Stringi id = props.getProperty("id"); String autor = props.getProperty("autor"); Stringi pealkiri = props.getProperty("title"); Stringžanr = props.getProperty("žanr"); String hind = props.getProperty("price"); String avaldamise_kuupäev = props.getProperty("avaldamise_kuupäev"); String descr = props.getProperty("kirjeldus");
Loome nüüd tühja raamat element.
Elemendi raamat = document.createElement("raamat"); book.setAttribute("id", id);
Alamelementide lisamine raamat on triviaalne. Mugavuse huvides kogume nõutavad elementide nimed a Nimekiri ja lisage väärtused tsüklina.
Nimekirielnames =Arrays.asList("autor", "pealkiri", "žanr", "hind", "avaldamise_kuupäev", "kirjeldus"); for (String elname: elnames) { Element el = document.createElement (elname); Teksttekst = document.createTextNode (props.getProperty (elname)); el.appendChild (tekst); book.appendChild (el); } catalog.appendChild (raamat);
Ja nii seda tehaksegi. The kataloog elemendil on nüüd uus raamat element lisatud. Nüüd jääb üle vaid uuendatud XML välja kirjutada.
XML-i kirjutamiseks vajame eksemplari Trafo mis luuakse allpool näidatud viisil. Pange tähele, et taotleme väljundi XML-i taanet kasutades setOutputProperty() meetod.
TransformerFactory tfact = TransformerFactory.newInstance(); Transformer tform = tfact.newTransformer(); tform.setOutputProperty (OutputKeys. TAANE, "jah"); tform.setOutputProperty("{ http://xml.apache.org/xslt}indent-amount", "3");
XML-väljundi genereerimise viimane etapp on teisenduse rakendamine. Tulemus kuvatakse väljundvoos, System.out.
tform.transform (uus DOMSource (dokument), uus StreamResult (System.out));
Väljundi kirjutamiseks otse faili kasutage järgmist.
tform.transform (uus DOMSource (dokument), uus StreamResult (uus fail("output.xml")));
See lõpetab selle artikli XML-failide lugemise ja kirjutamise kohta DOM API abil.
Kas olete oma rakendustes kasutanud DOM API-d? Kuidas see toimis? Palun andke meile allolevates kommentaarides teada.