Lesen Sie die lokale XML-Datei und analysieren Sie sie über DOM. Das Merkmal der DOM-Analyse besteht darin, die gesamte XML-Datei in den Speicher zu laden, um eine DOM-Baumstruktur zu bilden.
Das Merkmal der DOM-Analyse besteht darin, die XML-Datei zu lesen, sie in eine DOM-Baumstruktur umzuwandeln und die Knoten zu durchlaufen.
Dies ist das Knotenkonzept von W3c
Wenn das XML eine große Datenmenge enthält, eignet sich DOM aufgrund der Eigenschaft, das XML gleichzeitig in den Speicher zu laden, nicht zum Parsen von XML mit einer großen Datenmenge. Wenn eine große Menge an XML enthalten ist, spart das Parsen mit SAX Speicherplatz.
Das Folgende ist ein Beispiel für die Verwendung von DOM zum Parsen von XML-Dateien:
Die XML-Dateistruktur ist wie folgt:
<?xml version="1.0" binding="ISO-8859-1"?><bookstore> <book Category="cooking"> <title lang="en">Alltagsitalienisch</title> <author>Giada De Laurentiis </Autor> <Jahr>2005</Jahr> <Preis>30,00</Preis> </Buch> <Buchkategorie="Kinder"> <Titel lang="en">Harry Potter</Titel> <Autor>J K. Rowling</Autor> <year>2005</year> <price>29,99</price> </book> <book Category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</ Autor> <Jahr>2003</Jahr> <Preis>49,99</Preis> </book> <book Category="web" cover="paperback"> <title lang="en">Learning XML</title> < Autor>Erik T. Ray</Autor> <year>2003</year> <price>39,95</price> </book></bookstore>
Erstellen Sie eine Klasse zum Parsen von XML wie folgt:
package xml.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org .w3c.dom.Node;import org.w3c.dom.NodeList;öffentliche Klasse ReadXmlFile { public static void main(String[] args) { try{ File xmlFile = new File("src/resource/book.xml"); Dokument doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element: "+doc.getDocumentElement().getNodeName()); NodeList = doc.getElementsByTagName("book"); 0 ; i<nList.getLength();i++){ Knoten node = nList.item(i); System.out.println("Knotenname: "+ node.getNodeName()); Element ele = (Element)node("---------------- ------------"); if(node.getNodeType() == Element.ELEMENT_NODE){ System.out.println("Buchkategorie: "+ ele.getAttribute("Kategorie")) ; System.out.println("Titelname: "+ ele.getElementsByTagName("title").item(0).getTextContent()); System.out.println("author name: "+ele.getElementsByTagName("author").item(0).getTextContent()); System.out.println("Jahr :"+ele.getElementsByTagName("year").item(0).getTextContent()); System.out.println("price : "+ele.getElementsByTagName("price").item(0).getTextContent() ); System.out.println("--------");
Analyseergebnisse:
Wurzelelement: BuchhandlungKnotenname: Buch-----------Buchkategorie: KochenTitelname: AlltagsitalienischAutorenname: Giada De LaurentiisJahr: 2005Preis: 30,00 -----------Knotenname: Buch----------------- --- -------Buchkategorie: KinderTitelname: Harry PotterAutorenname: J K. RowlingJahr: 2005Preis: 29,99----------------------- -- Knotenname: Buch-------------------------Buchkategorie: Webtitelname: XQuery Kick Startauthor Name: James McGovernJahr:2003Preis: 49,99-------------------------Knotenname: Buch------------- --------------Buchkategorie: WebTitelname: Learning XMLAutorenname: Erik T. RayJahr: 2003Preis: 39,95---------------- --------
Das Obige dient dazu, den entsprechenden Wert über den Namen zu erhalten.
Über Schleifenknoten wird Folgendes ausgegeben:
Der Code für den Schleifenknoten-Ausgabemodus lautet wie folgt:
package xml.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org .w3c.dom.Node;import org.w3c.dom.NodeList; public class ReadXmlFile2 { public static void main(String[] args) { try{ File xmlFile = new File("DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance()); ; DocumentBuilder builder = builderFactory.newDocumentBuilder(); builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element: "+doc.getDocumentElement().getNodeName()); if(doc.hasChildNodes()){ printNode (doc.getChildNodes()); }catch(Exception e){ e.printStackTrace(); public static void printNode(NodeList nodeList){ System.out.println("-----------------------"); // System.out.println(nodeList. getLength()); for(int i = 0; i<nodeList.getLength(); i++){ Node node = (Node)nodeList.item(i); if(node.getNodeType() == Node.ELEMENT_NODE){ System.out.println("node name: "+node.getNodeName()); System.out.println("node value: "+node.getTextContent()); if(node.hasAttributes()){ NamedNodeMap nodeMap = node.getAttributes(); for(int j = 0; j < nodeMap.getLength(); j++){ Node nodenew = nodeMap.item(j); System.out.println("node name "+nodenew.getNodeName()); System.out.println("node value "+nodenew.getNodeValue()); ()){ printNode(node.getChildNodes()); } } } }}
Die Ausgabe ist wie folgt:
Stammelement: bookstore----------Knotenname: bookstorenode Wert: Everyday Italian Giada De Laurentiis 2005 30,00 Harry Potter J K. Rowling 2005 29,99 XQuery Kick Start James McGovern 2003 49,99 XML lernen Erik T. Ray 2003 39,95 ------------------Knotenname: Buchknotenwert: Alltagsitalienisch Giada De Laurentiis 2005 30,00 Knotenname KategorieKnotenwert Kochen-----------------------Knotenname: TitelKnotenwert: AlltagsitalienischKnotenname langKnotenwert en------- ----Knotenname: AutorKnotenwert: Giada De Laurentiis------------------------------------- - Knotenname: JahrKnotenwert: 2005---------Knotenname: PreisKnotenwert: 30,00----------- - ------------Knotenname: Buchknotenwert: Harry Potter J K. Rowling 2005 29,99 Knotenname KategorieKnotenwert Kinder---------Knotenname: TitelKnotenwert: Harry PotterKnotenname langKnotenwert en-------- ----------------Knotenname: AutorKnotenwert: J K. Rowling-------------------------------------- -------- Knotenname: JahrKnotenwert: 2005------------------------Knotenname: PreisKnotenwert: 29,99---- -------- ------------Knotenname: Buchknotenwert: XQuery Kick Start James McGovern 2003 49,99 Knotenname KategorieKnotenwert Web---------Knotenname: TitelKnotenwert: XQuery Kick StartKnotenname langKnotenwert de---------- ---------------Knotenname: AutorKnotenwert: James McGovern--------------------------Knoten Name: JahrKnotenwert: 2003--------------------------------Knotenname: PreisKnotenwert: 49,99----- ----------- --------Knotenname: Buchknotenwert: Learning XML Erik T. Ray 2003 39,95 Knotenname KategorieKnotenwert Webknotenname covernode value paperback------------------------node name: titlenode value: Learning XMLnode name langnode value en---------- - ------------Knotenname: AutorKnotenwert: Erik T. Ray--------------------------Knotenname : Jahresknotenwert: 2003----------Knotenname: Preisknotenwert: 39,95-------------- - ----------
Fragen zu Knoten:
<book Category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </ Buch>
Für Buchanwendungen: doc.getChildNodes() ruft eine NodeList ab, wobei die Länge der NodeList 9 beträgt
Die 9 Knoten sind wie folgt:
Titelknoten
lang-Knoten
Alltagsknoten
Autorenknoten
Giada De Laurentiis-Knoten
Jahresknoten
2005-Knoten
Preisknoten
30,00 Knoten