使用DOM解析XML文件

首先写了一个xml文件

[html]  view plain  copy
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <bookstore>  
  3.     <book id="1">  
  4.         <name>c#name>  
  5.         <author>张三author>  
  6.         <year>1990year>  
  7.         <price>60price>  
  8.     book>  
  9.           
  10.     <book id="2">  
  11.         <name>JAVAname>  
  12.         <author>李四author>  
  13.         <year>1991year>  
  14.         <price>80price>  
  15.     book>  
  16. bookstore>  

Dom解析xml文件

[java]  view plain  copy
  1. package com.edu.xynu;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.xml.parsers.DocumentBuilder;  
  6. import javax.xml.parsers.DocumentBuilderFactory;  
  7. import javax.xml.parsers.ParserConfigurationException;  
  8.   
  9. import org.w3c.dom.Document;  
  10. import org.w3c.dom.NamedNodeMap;  
  11. import org.w3c.dom.Node;  
  12. import org.w3c.dom.NodeList;  
  13. import org.xml.sax.SAXException;  
  14.   
  15. public class DOMTest {  
  16.   
  17.     public static void main(String[] args) {  
  18.       
  19.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  20.         try {  
  21.             // 创建DocumentBuilder对象  
  22.             DocumentBuilder db = dbf.newDocumentBuilder();  
  23.             // 通过DocumentBuilder对象的parse方法加载book.xml文件到当前项目下  
  24.             Document document = db.parse("books.xml");  
  25.             // 获取book节点的集合  
  26.             NodeList bookList = document.getElementsByTagName("book");  
  27.             // 通过NodeList的getLength方法获取bookList的长度  
  28.             System.out.println("一共有" + bookList.getLength() + "本书");  
  29.             // 遍历每一个book节点  
  30.             for (int i = 0; i < bookList.getLength(); i++) {  
  31.                 System.out.println("*********************开始遍历第" + (i + 1)  
  32.                         + "本书*********************");  
  33.                 // 通过item(i)方法获取一个book节点  
  34.                 Node book = bookList.item(i);  
  35.                 // 获取book节点的所有属性  
  36.                 NamedNodeMap attrs = book.getAttributes();  
  37.                 System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength()  
  38.                         + "个属性");  
  39.                 // 遍历book的属性  
  40.                 for (int j = 0; j < attrs.getLength(); j++) {  
  41.                     // 通过item方法获取book节点的某个属性  
  42.                     Node attr = attrs.item(j);  
  43.                     // 获取属性名  
  44.                     System.out.print("属性名:" + attr.getNodeName());  
  45.                     // 获取属性值  
  46.                     System.out.println("\t属性值:" + attr.getNodeValue());  
  47.                 }  
  48.   
  49.                 NodeList childNodes = book.getChildNodes();  
  50.                 // 遍历childNodes获取每个节点名和节点值  
  51.                 System.out.println("第" + (i + 1) + "本书共有"  
  52.                         + childNodes.getLength() + "个节点");  
  53.                 for (int j = 0; j < childNodes.getLength(); j++) {  
  54.                     // 区分text类型的node以及element类型的node  
  55.                     if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE) {  
  56.                         System.out.print("第" + (j + 1) + "个节点的节点名:"  
  57.                                 + childNodes.item(j).getNodeName());  
  58.                         System.out.println("--节点值:"  
  59.                                 + childNodes.item(j).getFirstChild()  
  60.                                         .getNodeValue());  
  61.                     }  
  62.                 }  
  63.                 System.out.println("*********************结束遍历第" + (i + 1)  
  64.                         + "本书*********************");  
  65.             }  
  66.         } catch (ParserConfigurationException e) {  
  67.   
  68.             e.printStackTrace();  
  69.         } catch (SAXException e) {  
  70.   
  71.             e.printStackTrace();  
  72.         } catch (IOException e) {  
  73.   
  74.             e.printStackTrace();  
  75.         }  
  76.     }  
  77.   
  78. }  

运行结果:

一共有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本书********************

你可能感兴趣的:(java)