首先写了一个xml文件
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>c#</name> <author>张三</author> <year>1990</year> <price>60</price> </book> <book id="2"> <name>JAVA</name> <author>李四</author> <year>1991</year> <price>80</price> </book> </bookstore>
Dom解析xml文件
package com.edu.xynu; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DOMTest { public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { // 创建DocumentBuilder对象 DocumentBuilder db = dbf.newDocumentBuilder(); // 通过DocumentBuilder对象的parse方法加载book.xml文件到当前项目下 Document document = db.parse("books.xml"); // 获取book节点的集合 NodeList bookList = document.getElementsByTagName("book"); // 通过NodeList的getLength方法获取bookList的长度 System.out.println("一共有" + bookList.getLength() + "本书"); // 遍历每一个book节点 for (int i = 0; i < bookList.getLength(); i++) { System.out.println("*********************开始遍历第" + (i + 1) + "本书*********************"); // 通过item(i)方法获取一个book节点 Node book = bookList.item(i); // 获取book节点的所有属性 NamedNodeMap attrs = book.getAttributes(); System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength() + "个属性"); // 遍历book的属性 for (int j = 0; j < attrs.getLength(); j++) { // 通过item方法获取book节点的某个属性 Node attr = attrs.item(j); // 获取属性名 System.out.print("属性名:" + attr.getNodeName()); // 获取属性值 System.out.println("\t属性值:" + attr.getNodeValue()); } NodeList childNodes = book.getChildNodes(); // 遍历childNodes获取每个节点名和节点值 System.out.println("第" + (i + 1) + "本书共有" + childNodes.getLength() + "个节点"); for (int j = 0; j < childNodes.getLength(); j++) { // 区分text类型的node以及element类型的node if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE) { System.out.print("第" + (j + 1) + "个节点的节点名:" + childNodes.item(j).getNodeName()); System.out.println("--节点值:" + childNodes.item(j).getFirstChild() .getNodeValue()); } } System.out.println("*********************结束遍历第" + (i + 1) + "本书*********************"); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
运行结果:
一共有2本书
*********************开始遍历第1本书*********************
第1本书共有1个属性
属性名:id 属性值:1
第1本书共有9个节点
第2个节点的节点名:name--节点值:c#
第4个节点的节点名:author--节点值:张三
第6个节点的节点名:year--节点值:1990
第8个节点的节点名:price--节点值:60
*********************结束遍历第1本书*********************
*********************开始遍历第2本书*********************
第2本书共有1个属性
属性名:id 属性值:2
第2本书共有9个节点
第2个节点的节点名:name--节点值:JAVA
第4个节点的节点名:author--节点值:李四
第6个节点的节点名:year--节点值:1991
第8个节点的节点名:price--节点值:80
*********************结束遍历第2本书*********************
时间: 2024-09-30 04:23:15