java 解析dom 树方式来解析XML文件

来源:互联网 发布:北京狮岛编程下载 编辑:程序博客网 时间:2024/05/01 07:02

原理

将XML 文件解析成dom 树(即Document 对象),对document 对象进行操作得到各个节点的名称和节点的值。

需要的 jar 包

xml-apis-1.4.01.jar

几个需要澄清的概念,如下图1,2,3,在代码中都有相应指定

图 1

图 2

图 3

代码:

Book.xml 文件

<?xml version="1.0" encoding="UTF-8"?>  <books>      <book id="12">          <name>thinking in java</name>          <price>85.5</price>      </book>      <book id="15">          <name>Spring in Action</name>          <price>39.0</price>      </book>  </books>  

DomParseService 类

package domParse;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class DomParseService {public static List<Book> getBooks(InputStream inputSream) throws ParserConfigurationException, SAXException, IOException {List<Book> list = new ArrayList<Book>();DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(inputSream);Element element = document.getDocumentElement();NodeList bookNodelist = element.getElementsByTagName("book");//所有的book 节点 for(int i=0;i<bookNodelist.getLength();i++) {Book book = new Book();Element bookElement = (Element)bookNodelist.item(i);//这个item() 函数返回的类型DeferredElementImpl,是Element 接口的实现类,Element 实现了Node,<span style="color:#ff0000;">如图1</span>,这个函数本身返回的是Node 接口类型book.setId(Integer.parseInt(bookElement.getAttribute("id")));NodeList bookChildNodelist = bookElement.getChildNodes();for(int j = 0;j < bookChildNodelist.getLength();j++) {if(bookChildNodelist.item(j).getNodeType() == Node.ELEMENT_NODE) { //看看这里面有什么属性node(有TEXT_NODE ,即那些空白,<span style="color:#ff0000;">如图2</span>)  if("name".equals(bookChildNodelist.item(j).getNodeName())) {book.setName(bookChildNodelist.item(j).getFirstChild().getNodeValue());} else if("price".equals(bookChildNodelist.item(j).getNodeName())) {book.setPrice(Float.parseFloat(bookChildNodelist.item(j).getFirstChild().getNodeValue()));  //<span style="color:#ff0000;">如图3</span>}}}list.add(book);}return list;}}
Book 类

package domParse;public class Book {private int id;private String name;private float price;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}}

Main 类

package domParse;import java.io.IOException;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import org.xml.sax.SAXException;public class Main {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {List<Book> bookList = DomParseService.getBooks(new Main().getClass().getClassLoader().getResourceAsStream("Book.xml"));//.getResourceAsStream("Book.xml")for(Book book : bookList) {System.out.println("this book id, name, price : " + String.valueOf(book.getId()) + book.getName() + book.getPrice());}}}



运行结果:

this book id, name, price : 12  thinking in java   85.5
this book id, name, price : 15  Spring in Action  39.0

 

 







0 0
原创粉丝点击