web之家  
book.xml数据如下:
[html] view plain copy
 
  1. <books>  
  2.     <book>  
  3.         <author>Thomas</author>  
  4.         <title>Java从入门到放弃</title>  
  5.         <publisher>UCCU</publisher>  
  6.     </book>  
  7.     <book>  
  8.         <author>小白</author>  
  9.         <title>MySQL从删库到跑路</title>  
  10.         <publisher>Go Die</publisher>  
  11.     </book>  
  12.     <book>  
  13.         <author>PHPer</author>  
  14.         <title>Best PHP</title>  
  15.         <publisher>PHPchurch</publisher>  
  16.     </book>  
  17. </books>  
我把book.xml放在D盘的根目录下,这样读取时能比较方便些……
下面是代码:
[java] view plain copy
 
  1. package com;  
  2.   
  3. import org.dom4j.Document;  
  4. import org.dom4j.Element;  
  5. import org.dom4j.io.SAXReader;  
  6.   
  7. import java.io.ByteArrayInputStream;  
  8. import java.io.File;  
  9. import java.util.List;  
  10.   
  11. public class SAXReaderXML {  
  12.     public static void main(String[] args) throws Exception {  
  13.         SAXReader reader = new SAXReader();  
  14.         File xmlfile = new File("D:/books.xml");  
  15.         String xml = "<books><book><author>Thomas</author><title>Java从入门到放弃</title><publisher>UCCU</publisher>" +  
  16.                 "</book><book><author>小白</author><title>MySQL从删库到跑路</title><publisher>GoDie</publisher></book>" +  
  17.                 "<book><author>PHPer</author><title>BestPHP</title><publisher>PHPchurch</publisher></book></books>";  
  18.         Document fileDocument = reader.read(xmlfile);//从xml文件获取数据  
  19.         Document document = reader.read(new ByteArrayInputStream(xml.getBytes("utf-8")));//读取xml字符串,注意这里要转成输入流  
  20.         Element root = document.getRootElement();//获取根元素  
  21.         List<Element> childElements = root.elements();//获取当前元素下的全部子元素  
  22.   
  23.         for (Element child : childElements) {//循环输出全部book的相关信息  
  24.             List<Element> books = child.elements();  
  25.             for (Element book : books) {  
  26.                 String name = book.getName();//获取当前元素名  
  27.                 String text = book.getText();//获取当前元素值  
  28.                 System.out.println(name + ":" + text);  
  29.             }  
  30.         }  
  31.         //获取第二条书籍的信息  
  32.         Element book2 = childElements.get(1);  
  33.         Element author = book2.element("author");//根据元素名获取子元素  
  34.         Element title = book2.element("title");  
  35.         Element publisher = book2.element("publisher");  
  36.         System.out.println("作者:" + author.getText());//获取元素值  
  37.         System.out.println("书名:" + title.getText());  
  38.         System.out.println("出版社:"+publisher.getText());  
  39.     }  
  40. }  
代码解析:
1、读取xml数据
SAXReader可以通过多种方式读取xml数据,并返回Document格式的对象。通过查看源码,可以看出read()方法接收File,InputStream和URL等格式的参数来读取相应的xml数据。在代码里我演示了读取xml文档和xml格式的字符串两种方式。当然,字符串要根据相应的编码转成输入流才能被SAXReader读取。
2、解析xml数据
读取到Document对象后,我们使用getRootElement()方法获取根元素,返回的是一个Element对象。在本例中,该元素的name即为books。
3、获取子元素数据
获取根元素后,便可以一层一层的去获取他的子元素信息。如果知道子元素的标签名称,便可以直接调用element("name")方法获取该子元素。如果不知道子元素的名称,或者想直接获取该元素下的全部子元素,可以调用elements()方法获取一个包括全部元素的list,然后进行下一步的处理。
4、输出元素信息
调用getName()方法获取当前元素的元素名,attributeValue()获取属性名。如果当前元素没有子元素,则调用getText()方法获取元素值。

 

posted on 2017-07-07 11:16  路修远而求索  阅读(398)  评论(0编辑  收藏  举报