您的当前位置:首页正文

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

来源:九壹网

原理

将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

 

 







因篇幅问题不能全部显示,请点此查看更多更全内容

Top