XML-fájlok használata Java-ban a DOM-elemzés segítségével
1. Áttekintés
Ebben az oktatóanyagban megvitatjuk, hogyan elemezzük a DOM-ot az Apache Xerces programmal - egy érett és bevált könyvtár az XML elemzéséhez / manipulálásához.
Az XML-dokumentum elemzésének több lehetősége van; ebben a cikkben a DOM elemzésére koncentrálunk. A DOM-elemző betölt egy dokumentumot, és létrehoz egy teljes hierarchikus fát a memóriában.
A Java XML könyvtárak támogatásának áttekintéséhez olvassa el előző cikkünket.
2. Dokumentumunk
Kezdjük azzal a XML dokumentummal, amelyet a példánkban használunk:
Guava Bevezetés Guava 2016.04.04. GuavaAuthor ...
Ne feledje, hogy dokumentumunknak van egy „oktatóanyagok” nevű gyökércsomópontja 4 „oktató” gyermek csomóponttal. Mindegyiknek két attribútuma van: „tutId” és „type”. Ezenkívül minden „oktatóanyagnak” 4 gyermekcsomópontja van: „cím”, „leírás”, „dátum” és „szerző”.
Most folytathatjuk a dokumentum elemzését.
3. XML fájl betöltése
Először is meg kell jegyeznünk az Apache Xerces könyvtár a JDK-val van csomagolva, így nincs szükségünk további beállításokra.
Ugorjunk rögtön az XML fájlunk betöltésébe:
DocumentBuilder builder = DocumentBuilderFactory.newInstance (). NewDocumentBuilder (); Dokumentum doc = builder.parse (új Fájl ("src / test / resources / example_jdom.xml"); doc.getDocumentElement (). normalizálja ();
A fenti példában először megkapjuk a DocumentBuilder osztály, majd használja a elemzés () metódus az XML dokumentumon a Dokumentum azt képviselő tárgy.
Használnunk kell a normalizálás () módszer annak biztosítására, hogy a dokumentum hierarchiáját ne befolyásolják a csomópontokon belüli további fehér szóközök vagy új sorok.
4. A DOM elemzése
Most vizsgáljuk meg az XML fájlunkat.
Kezdjük az összes elem beolvasásával a „tutorial” címkével. Ezt megtehetjük a getElementsByTagName () metódus, amely a NodeList:
@Test public void whenGetElementByTag_thenSuccess () {NodeList nodeList = doc.getElementsByTagName ("oktatóanyag"); Node first = nodeList.item (0); assertEquals (4, nodeList.getLength ()); assertEquals (Node.ELEMENT_NODE, first.getNodeType ()); assertEquals ("tutorial", first.getNodeName ()); }
Fontos megjegyezni Csomópont a DOM-összetevők elsődleges adattípusa. Az összes elem, attribútum, szöveg csomópontnak számít.
Ezután nézzük meg, hogyan tudjuk megszerezni az első elem attribútumait getAttributes ():
@Test public void whenGetFirstElementAttributes_thenSuccess () {Node first = doc.getElementsByTagName ("tutorial"). Item (0); NamedNodeMap attrList = first.getAttributes (); assertEquals (2, attrList.getLength ()); assertEquals ("tutId", attrList.item (0) .getNodeName ()); assertEquals ("01", attrList.item (0) .getNodeValue ()); assertEquals ("type", attrList.item (1) .getNodeName ()); assertEquals ("java", attrList.item (1) .getNodeValue ()); }
Itt megkapjuk a NamedNodeMap objektumot, majd használja a elem (index) módszer az egyes csomópontok lekéréséhez.
Minden csomópontra használhatjuk getNodeName () és getNodeValue () hogy megtalálják attribútumaikat.
5. Traversing Nodes
Ezután nézzük meg, hogyan lehet áthaladni a DOM csomópontokon.
A következő tesztben bejárjuk az első elem gyermekcsomópontjait, és kinyomtatjuk azok tartalmát:
@Test public void whenTraverseChildNodes_thenSuccess () {Első csomópont = doc.getElementsByTagName ("oktatóanyag"). Elem (0); NodeList nodeList = first.getChildNodes (); int n = nodeList.getLength (); Csomópont áram; mert (int i = 0; i
Először megkapjuk a NodeList használni a getChildNodes () metódust, majd iteráljon rajta, és nyomtassa ki a csomópont nevét és szöveges tartalmát.
A kimenet megmutatja a dokumentumunk első „bemutató” elemének tartalmát:
cím: Guava leírása: Bevezetés a Guava dátumba: 2016.04.04. szerző: GuavaAuthor
6. A DOM módosítása
Változtathatunk a DOM-on is.
Példaként változtassuk meg a típus attribútum „java” -ról „egyéb” -re:
@Test public void whenModifyDocument_thenModified () {NodeList nodeList = doc.getElementsByTagName ("oktatóanyag"); Először = (Elem) nodeList.item (0); assertEquals ("java", first.getAttribute ("type")); first.setAttribute ("type", "other"); assertEquals ("egyéb", first.getAttribute ("típus")); }
Itt az attribútum értékének megváltoztatása egyszerű feladat az Elem’S setAttribute () módszer.
7. Új dokumentum létrehozása
A DOM módosítása mellett új XML dokumentumokat is létrehozhatunk a semmiből.
Először nézzük meg a létrehozni kívánt fájlt:
[e-mail védett]
XML-fájlunk a felhasználók gyökércsomópont egy felhasználó elem, amelynek gyermekcsomópontja is van email.
Ennek eléréséhez először a Építész’S newDocument () metódus, amely a Dokumentum tárgy.
Aztán felhívjuk a createElement () az új objektum metódusa:
@Test public void whenCreateNewDocument_thenCreated () dobja a Kivételt {Document newDoc = builder.newDocument (); Elemgyökér = newDoc.createElement ("felhasználók"); newDoc.appendChild (root); Első az első = newDoc.createElement ("felhasználó"); root.appendChild (első); first.setAttribute ("id", "1"); Elem e-mail = newDoc.createElement ("e-mail"); email.appendChild (newDoc.createTextNode ("[e-mail védett]")); first.appendChild (e-mail); assertEquals (1, newDoc.getChildNodes (). getLength ()); assertEquals ("felhasználók", newDoc.getChildNodes (). item (0) .getNodeName ()); }
Minden elem hozzáadásához a DOM-hoz hívjuk a appendChild () módszer.
8. Dokumentum mentése
Miután módosította a dokumentumunkat, vagy létrehozott egyet a semmiből, fájlba kell mentenünk.
Kezdjük a. Létrehozásával DOMSource objektumot, majd használjon egyszerű Transzformátor a dokumentum fájlba mentéséhez:
private void saveDomToFile (Dokumentumdokumentum, String fájlNév) dobja a {DOMSource dom = új DOMSource (dokumentum) kivételt; Transzformátor transzformátor = TransformerFactory.newInstance () .newTransformer (); StreamResult eredmény = új StreamResult (új fájl (fájlnév)); transzformátor.transzform (dom, eredmény); }
Hasonlóképpen kinyomtathatjuk dokumentumunkat a konzolon:
private void printDom (Document document) dobja a {DOMSource dom = new DOMSource (document) kivételt; Transzformátor transzformátor = TransformerFactory.newInstance () .newTransformer (); transzformátor.transform (dom, új StreamResult (System.out)); }
9. Következtetés
Ebben a rövid cikkben megtanultuk, hogyan használhatjuk az Xerces DOM elemzőt egy XML dokumentum létrehozására, módosítására és mentésére.
Mint mindig, a példák teljes forráskódja elérhető a GitHubon.