原理:
将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;
}
}
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
因篇幅问题不能全部显示,请点此查看更多更全内容