Hirdetés
Szeretné megtanulni, hogyan kell XML-fájlt olvasni és írni Java-ból?
XML fájlok Mi az XML fájl, és hogyan lehet megnyitni és használni?Lehet, hogy látta az "XML" kifejezést. Lehet, hogy véletlenül megnyitott egy XML-fájlt. Mi az XML és hogyan használjuk? Olvass tovább különféle célokra használják, beleértve az adatok tárolását. Mielőtt a JSON népszerűvé vált, az XML volt a preferált formátum a strukturált adatok megjelenítésére, tárolására és szállítására. Annak ellenére, hogy az XML népszerűsége csökkent az elmúlt években, időnként találkozhat vele, ezért fontos megtanulni, hogyan kell kódból dolgozni vele.
Java Standard Edition (SE) 10 alapvető Java-fogalom, amelyet meg kell tanulnia az induláskorAkár grafikus felhasználói felületet ír, akár szerveroldali szoftvert fejleszt, vagy Androidot használó mobilalkalmazást, a Java tanulása jó szolgálatot tesz. Íme néhány alapvető Java-koncepció, amelyek segítenek az indulásban. Olvass tovább tartalmazza a Java API XML-feldolgozáshoz (JAXP), amely az XML-feldolgozás legtöbb aspektusát lefedő gyűjtőfogalom. Ezek tartalmazzák:
- DOM: A Dokumentumobjektum-modell osztályokat tartalmaz az XML-műtermékekkel, például elemekkel, csomópontokkal, attribútumokkal stb. A DOM API a teljes XML dokumentumot betölti a memóriába feldolgozás céljából, így nem nagyon alkalmas nagy XML fájlokkal való munkavégzésre.
- SAX: A Simple API for XML egy eseményvezérelt algoritmus az XML olvasásához. Itt az XML feldolgozása az XML olvasása során talált események aktiválásával történik. Ennek a módszernek a memóriaigénye alacsony, de az API-val való munka bonyolultabb, mint a DOM-mal.
- Stax: Az XML-hez készült Streaming API az XML API-k legújabb kiegészítése, és nagy teljesítményű adatfolyam-szűrést, -feldolgozást és -módosítást biztosít az XML-ben. Bár elkerüli a teljes XML-dokumentum memóriába való betöltését, inkább pull-típusú architektúrát biztosít mint egy eseményvezérelt architektúra, így az alkalmazás könnyebben kódolható és érthetőbb, mint a SAX használata API.
Ebben a cikkben a DOM API bemutatni, hogyan lehet XML-fájlokat olvasni és írni Java-ból. A másik két API-val a jövőbeni cikkekben foglalkozunk.
Egy minta XML fájl
Ebben a cikkben bemutatjuk a fogalmakat a következő XML-minta segítségével, amely megtalálható itt:
1.0?>Gambardella, Matthew XML fejlesztői útmutató
Számítógép 44.95 2000-10-01 Mélyreható áttekintés az XML-alapú alkalmazások létrehozásáról. Ralls, Kim ...
XML fájl olvasása
Nézzük meg az XML-fájlok DOM API használatával történő olvasásához szükséges alapvető lépéseket.
Az első lépés a példány beszerzése DocumentBuilder. A builder az XML dokumentumok elemzésére szolgál. Alapvető használathoz a következőképpen tesszük:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware (false); factory.setValidating (false); DocumentBuilder builder = factory.newDocumentBuilder();
Mostantól a teljes dokumentumot betölthetjük a memóriába az XML gyökérelemtől kezdve. Példánkban ez a katalógus elem.
Fájlfájl =...; // Olvasandó XML fájl. Dokumentum dokumentum = builder.parse (fájl); Elemkatalógus = document.getDocumentElement();
És ennyi, emberek! Az XML olvasására szolgáló DOM API nagyon egyszerű. Mostantól hozzáférhet a teljes XML dokumentumhoz a gyökérelemtől kezdve, katalógus. Lássuk most, hogyan dolgozhatunk vele.
A DOM API használata
Most, hogy megvan az XML gyökér Elem, a DOM API segítségével érdekes információrögöket nyerhetünk ki.
Szerezd meg az összeset könyv a gyökérelem gyermekeit, és hurokozza át őket. Vegye figyelembe, hogy getChildNodes() visszatér összes gyerekek, beleértve a szöveget, megjegyzéseket stb. Célunkhoz csak a gyermekelemekre van szükségünk, ezért átugorjuk a többit.
NodeList books = catalog.getChildNodes(); for (int i = 0, ii = 0, n = könyvek.getLength(); i
Hogyan találhat meg egy adott gyermek elemet, ha a szülő adott? A következő statikus metódus visszaadja az első egyező elemet, ha megtalálható, vagy nullát. Amint láthatja, az eljárás magában foglalja a gyermek csomópontok listájának lekérését, és a rajtuk való áthurkolást, és kiválasztja a megadott nevű elemcsomópontokat.
statikus privát Node findFirstNamedElement (csomópont szülő, String címkenév) { NodeList children = parent.getChildNodes(); for (int i = 0, in = children.getLength(); i < be; i++) { Csomópont gyermek = gyermekek.elem (i); if ( gyermek.getNodeType() != Csomópont. ELEMENT_NODE ) folytatás; if ( child.getNodeName().equals (tagName) ) return gyermek; } return null; }
Vegye figyelembe, hogy a DOM API egy elemen belüli szöveges tartalmat külön típusú csomópontként kezeli TEXT_NODE. Ezenkívül a szöveges tartalom több szomszédos szövegcsomópontra osztható fel. Tehát a következő speciális feldolgozás szükséges az elemen belüli szövegtartalom lekéréséhez.
statikus privát karakterlánc getCharacterData (csomópont szülő) { StringBuilder text = new StringBuilder(); if ( szülő == null ) return text.toString(); NodeList children = parent.getChildNodes(); for (int k = 0, kn = children.getLength(); k < kn; k++) { Csomópont gyermek = gyermekek.elem (k); if ( gyermek.getNodeType() != Csomópont. SZÖVEG_NODE ) szünet; text.append (child.getNodeValue()); } return text.toString(); }
Ezekkel a kényelmi funkciókkal felvértezve nézzünk meg néhány kódot az XML-minta információinak felsorolásához. Szeretnénk minden könyvről részletes információkat megjeleníteni, például egy könyvkatalógusban.
NodeList books = catalog.getChildNodes(); for (int i = 0, ii = 0, n = könyvek.getLength(); i
XML kimenet írása
A Java biztosítja a XML Transform API XML adatok átalakításához. Ezt az API-t a identitás transzformáció kimenet létrehozásához.
Példaként adjunk hozzá egy újat könyv elemet a fent bemutatott minta katalógushoz. A könyv részletei (pl szerző, címstb.) külsőleg is beszerezhető, esetleg tulajdonságfájlból vagy adatbázisból. Az adatok betöltéséhez a következő tulajdonságfájlt használjuk.
id=bk113. szerző=Jane Austen. title=Büszkeség és balítélet. műfaj=romantika. ár = 6,99. közzétételi_dátum=2010-04-01. description="Egy általánosan elismert igazság, hogy egy egyedülálló férfinak, akinek jó szerencséje van, szüksége van feleségre." Így kezdődik a Pride és a Prejudice, Jane Austen szellemes modor-komédiája – minden idők egyik legnépszerűbb regénye –, amely pompásan civilizált párharcot tartalmaz a büszke Mr. Darcy és az előítéletes Elizabeth Bennet, amint lelkes udvarlásukat játsszák a tizennyolcadik századi szalonban intrikák.
Az első lépés a meglévő XML fájl elemzése a fent bemutatott módszerrel. A kód alább is látható.
Fájlfájl =...; // Olvasandó XML fájl. Dokumentum dokumentum = builder.parse (fájl); Elemkatalógus = document.getDocumentElement();
Az adatokat a tulajdonságfájlból töltjük be a Tulajdonságok osztály Java-val ellátva. A kód meglehetősen egyszerű, és az alábbiakban látható.
String propsFile =...; Properties props = new Properties(); try (FileReader in = new FileReader (propsFile)) { props.load (in); }
A tulajdonságok betöltése után a tulajdonságfájlból lekérjük a hozzáadni kívánt értékeket.
String id = props.getProperty("id"); String author = props.getProperty("author"); String title = props.getProperty("title"); String műfaj = props.getProperty("műfaj"); String price = props.getProperty("ár"); Karakterlánc közzétételi_dátum = props.getProperty("közzétételi_dátum"); String descr = props.getProperty("leírás");
Most hozzunk létre egy üreset könyv elem.
Elem könyv = document.createElement("könyv"); book.setAttribute("id", id);
A gyermek elemek hozzáadása a könyv triviális. A kényelem kedvéért összegyűjtjük a szükséges elemneveket a Lista és ciklusban adja hozzá az értékeket.
Listaelnames =Arrays.asList("szerző", "cím", "műfaj", "ár", "közzétételi_dátum", "leírás"); for (String elname: elnames) { Element el = document.createElement (elname); Szöveg szöveg = document.createTextNode (props.getProperty (elname)); el.appendChild (szöveg); könyv.appendChild (el); } katalógus.appendChild (könyv);
És ez így történik. Az katalógus elem most az új könyv elem hozzáadva. Már csak a frissített XML kiírása van hátra.
Az XML írásához szükségünk van egy példányra Transzformátor amely az alábbiak szerint jön létre. Vegye figyelembe, hogy a kimeneti XML behúzását kérjük a setOutputProperty() módszer.
TransformerFactory tfact = TransformerFactory.newInstance(); Transzformátor tform = tfact.newTransformer(); tform.setOutputProperty (OutputKeys. BEVÉTEL, "igen"); tform.setOutputProperty("{ http://xml.apache.org/xslt}indent-amount", "3");
Az XML kimenet létrehozásának utolsó lépése a transzformáció alkalmazása. Az eredmény megjelenik a kimeneti adatfolyamon, System.out.
tform.transform (új DOMSource (dokumentum), új StreamResult (System.out));
Ha a kimenetet közvetlenül fájlba szeretné írni, használja a következőket.
tform.transform (új DOMSource (dokumentum), új StreamResult (new File("output.xml")));
És ezzel zárja ezt a cikket az XML-fájlok olvasásával és írásával a DOM API használatával.
Használta a DOM API-t alkalmazásaiban? Hogyan teljesített? Kérjük, ossza meg velünk az alábbi megjegyzésekben.