Lea el archivo xml local y analícelo a través de DOM. La característica del análisis DOM es cargar todo el archivo xml en la memoria para formar una estructura de árbol DOM, que es conveniente para el recorrido y la manipulación.
La característica del análisis DOM es leer el archivo xml, convertirlo en una estructura de árbol dom y atravesar los nodos.
Este es el concepto de nodos del W3c
Si el XML contiene una gran cantidad de datos, DOM no es adecuado para analizar XML que contiene una gran cantidad de datos debido a la característica de cargar el XML en la memoria al mismo tiempo. Cuando se incluye una gran cantidad de xml, el análisis con SAX ahorra memoria.
El siguiente es un ejemplo del uso de DOM para analizar archivos xml:
La estructura del archivo xml es la siguiente:
<?xml versión="1.0" codificación="ISO-8859-1"?><librería> <libro categoría="cocina"> <title lang="en">Italiano cotidiano</title> <autor>Giada De Laurentiis </autor> <año>2005</año> <precio>30,00</precio> </libro> <libro categoría="niños"> <título lang="en">Harry Potter</título> <autor>J K. Rowling</autor> <año>2005</año> <precio>29,99</precio> </libro> <libro categoría="web"> <título lang="en">XQuery Kick Start</título> <autor>James McGovern</ autor> <año>2003</año> <precio>49,99</precio> </libro> <libro categoría="web" cover="paperback"> <título lang="en">Aprendizaje de XML</título> < autor>Erik T. Ray</autor> <año>2003</año> <precio>39,95</precio> </libro></librería>
Cree una clase para analizar xml de la siguiente manera:
paquete xml.dom;importar java.io.File;importar javax.xml.parsers.DocumentBuilder;importar javax.xml.parsers.DocumentBuilderFactory;importar org.w3c.dom.Document;importar org.w3c.dom.Element;importar org .w3c.dom.Node;importar org.w3c.dom.NodeList;clase pública ReadXmlFile { public static void main(String[] args) { try{ Archivo xmlFile = nuevo archivo("src/resource/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); Documento doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("Elemento raíz: "+doc.getDocumentElement().getNodeName()); 0 ; i<nList.getLength();i++){ Nodo nodo = nList.item(i); System.out.println("Nombre de nodo: "+ node.getNodeName()); Elemento ele = (Elemento)nodo; ------------"); if(node.getNodeType() == Element.ELEMENT_NODE){ System.out.println("categoría de libro: "+ ele.getAttribute("categoría")) ; System.out.println("nombre del título: "+ ele.getElementsByTagName("título").item(0).getTextContent()); System.out.println("nombre del autor: "+ele.getElementsByTagName("autor").item(0).getTextContent()); System.out.println("año :"+ele.getElementsByTagName("año").item(0).getTextContent()); System.out.println("precio: "+ele.getElementsByTagName("precio").item(0).getTextContent() ); System.out.println("------------------------");
Resultados del análisis:
Elemento raíz: libreríaNombre de nodo: libro--------------------------categoría de libro: cocinanombre del título: Everyday Italiannombre del autor: Giada De Laurentiisaño: 2005precio: 30,00 -------------------------Nombre de nodo: libro------------------ --- -------categoría del libro: niñosnombre del título: Harry Potternombre del autor: J K. Rowlingaño:2005precio: 29,99----------------------- -- Nombre de nodo: libro--------------------------categoría del libro: nombre del título web: XQuery Kick Startauthor nombre: James McGovernaño:2003precio: 49,99----------------------------------Nombre de nodo: libro------------- ---------------categoría del libro: nombre del título web: Learning XMLnombre del autor: Erik T. Rayaño:2003precio: 39,95----------------- --------
Lo anterior es para obtener el valor correspondiente a través del nombre.
Lo siguiente se genera utilizando nodos de bucle:
El código para el modo de salida del nodo de bucle es el siguiente:
paquete xml.dom;importar java.io.File;importar javax.xml.parsers.DocumentBuilder;importar javax.xml.parsers.DocumentBuilderFactory;importar org.w3c.dom.Document;importar org.w3c.dom.NamedNodeMap;importar org .w3c.dom.Nodo;importar org.w3c.dom.NodeList; clase pública ReadXmlFile2 { public static void main(String[] args) { try{ Archivo xmlFile = new File("src/resource/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); ; Constructor de documentos = builderFactory.newDocumentBuilder(); builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("Elemento raíz: "+doc.getDocumentElement().getNodeName()); (doc.getChildNodes()); } }catch(Exception e){ e.printStackTrace(); printNode(NodeList nodeList){ System.out.println("-----------------------"); // System.out.println(nodeList. getLength()); for(int i = 0; i<nodeList.getLength(); i++){ Nodo nodo = (Nodo)nodeList.item(i); if(node.getNodeType() == Nodo.ELEMENT_NODE){ System.out.println("nombre de nodo: "+node.getNodeName()); System.out.println("valor de nodo: "+node.getTextContent()); if(node.hasAttributes()){ NamedNodeMap nodeMap = node.getAttributes(); for(int j = 0; j < nodeMap.getLength(); j++){ Nodo nodenew = nodeMap.item(j); System.out.println("nombre de nodo "+nodenew.getNodeName()); System.out.println("valor de nodo "+nodenew.getNodeValue()); ()){ printNode(nodo.getChildNodes());
El resultado es el siguiente:
Elemento raíz: librería------------------------nombre de nodo: libreríavalor de nodo: Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern 2003 49,99 Aprendizaje de XML Erik T. Ray 2003 39,95 ------------------nombre de nodo: librovalor de nodo: italiano cotidiano Giada De Laurentiis 2005 30.00 nombre de nodo categoríavalor de nodo cocina------------------------nombre de nodo: títulovalor de nodo: todos los días italianonombre de nodo valor de langnodo en------- ------------------nombre de nodo: valor de nodo de autor: Giada De Laurentiis----------------------- - nombre de nodo: año valor de nodo: 2005------------------------nombre de nodo: precio valor de nodo: 30.00----------- - ------------nombre de nodo: valor de nodo de libro: Harry Potter J K. Rowling 2005 29.99 nombre de nodo categoríavalor de nodo hijos------------------------nombre de nodo: títulovalor de nodo: Harry Potternombre de nodo valor de langnodo en-------- ----------------nombre de nodo: valor de nodo de autor: J K. Rowling------------------------ -------- nombre de nodo: año valor de nodo: 2005------------------------nombre de nodo: precio valor de nodo: 29,99---- -------- ------------nombre de nodo: valor de nodo de libro: XQuery Kick Start James McGovern 2003 49,99 nombre de nodo valor de nodo de categoría web------------------------nombre de nodo: valor de nodo de título: XQuery Kick Startnombre de nodo valor de langnodo en---------- ---------------nombre de nodo: autorvalor de nodo: James McGovern--------------------------nodo nombre: añovalor de nodo: 2003--------------------------------nombre de nodo: preciovalor de nodo: 49.99----- ----------- --------nombre de nodo: librovalor de nodo: aprendizaje XML Erik T. Ray 2003 39,95 nombre de nodo categoríavalor de nodo nombre de nodo web covernode value libro de bolsillo-----------------------nombre de nodo: titlevalor de nodo: aprendizaje XMLnombre de nodo valor de langnode en---------- - ------------nombre de nodo: valor de nodo de autor: Erik T. Ray--------------------------nombre de nodo : valor de nodo de año: 2003------------------------nombre de nodo: valor de nodo de precio: 39.95-------------- -----------
Preguntas sobre nodos:
<libro categoría="cocina"> <título lang="es">Italiano cotidiano</título> <autor>Giada De Laurentiis</autor> <año>2005</año> <precio>30,00</precio> </ libro>
Para aplicaciones de libros: doc.getChildNodes() obtiene una NodeList donde la longitud de NodeList es 9
Los 9 nodos son los siguientes:
nodo de título
nodo de idioma
nodo cotidiano
nodo de autor
Nodo de Giada De Laurentiis
nodo año
2005 nodo
nodo de precio
30.00 nodo