1、什么是DOM4j?
DOM4J是一个Java的XML API,是JDOM的升级品,用来读写XML文件的
2、DOM4j具有什么特点?
JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。它使用接口和抽象基本类方法。具有性能优异、灵活性好、功能强大和极端易用的特点。是一个开放源码的文件。
3、DOM4j例子?
1、book.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD -->
<!-- <!DOCTYPE books [
<!ELEMENT books (book*)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
]>
-->
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="{book.xsd}">
<book id="1001">
<name>java开发实战</name>
<author>张小三</author>
<price>98.5</price>
</book>
<book id="1002">
<name>mysql从删库到跑路</name>
<author>飞毛腿</author>
<price>1000</price>
</book>
</books>
2、导包:
3、TestDom4J.java
package com.bjsxt.schema;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestDOM4J {
public static void main(String[] args) throws DocumentException {
//1、创建SAXReader对象
SAXReader reader=new SAXReader();
//2、调用read方法
Document doc=reader.read(new File("book.xml"));
//3、获取根元素
Element root=doc.getRootElement();//books
//4、通过迭代器遍历直接节点
for(Iterator<Element> iteBook=root.elementIterator();iteBook.hasNext();){
Element bookEle=iteBook.next();
// System.out.println(bookEle.getName());
for(Iterator<Attribute> iteAtt=bookEle.attributeIterator();iteAtt.hasNext();){
Attribute att=iteAtt.next();
System.out.println(att.getName()+"t"+att.getText());
}
}
System.out.println("n------------------------------");
List<Book> bookList=new ArrayList<>();
for(Iterator<Element> iteBook=root.elementIterator();iteBook.hasNext();){
//创建Book对象
Book book=new Book();
Element bookEle=iteBook.next(); //得到每一个book
//使用for循环继续遍历
for(Iterator<Element> subBookEle=bookEle.elementIterator();subBookEle.hasNext();){
//得到每一个子元素
Element subEle=subBookEle.next();
System.out.println(subEle.getName()+"t"+subEle.getText());
/**封装成Book对象*/
//获取节点的名称
String nodeName=subEle.getName();//name,author,price
//使用switch判断
switch(nodeName){
case "name":
book.setName(subEle.getText());
break;
case "author":
book.setAuthor(subEle.getText());
break;
case "price":
book.setPrice(Double.parseDouble(subEle.getText()));
break;
}
}
System.out.println("n---------------------------");
//添加到集合中
bookList.add(book);
}
System.out.println("n遍历集合----------------------------");
for(Book b:bookList){
System.out.println(b.getName()+"t"+b.getAuthor()+"t");
}
}
}
4、输出结果:
注意:可以发现其实DOM4j与JDOM写法相似,一个是builer一个是reader
1、什么是XPATH?
在DOM4J解析中使用XPATH技术可以快速的获取节点。XPATH技术有点像正则表达式,是一种语法格式,通过这种语法可以快速捕获节点。
2、在使用XPATH技术快速获取节点需要做哪些准备工作?
需要将相应的jar包导入工程项目中,即DOM4J的jar包,Jaxen的jar包。同时若有需要还需要XPath的中文文档以供参考。
3、案例?
1、book.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD -->
<!-- <!DOCTYPE books [
<!ELEMENT books (book*)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
]>
-->
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="{book.xsd}">
<book id="1001">
<name>java开发实战</name>
<author>张小三</author>
<price>98.5</price>
</book>
<book id="1002">
<name>mysql从删库到跑路</name>
<author>飞毛腿</author>
<price>1000</price>
</book>
</books>
2、TestXPATH.java
package com.bjsxt.schema;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class TestXPath {
public static void main(String[] args) throws DocumentException {
//1、SAXReader对象
SAXReader reader=new SAXReader();
//2、读取XML文件
Document doc=reader.read("book.xml");
//得到第一个author节点
Node node=doc.selectSingleNode("//author");
System.out.println("节点的名称:"+node.getName()+"t"+node.getText());
//获取所有的author
System.out.println("n-------------------------");
List<Node> list=doc.selectNodes("//author");
for(Node n:list){
System.out.println("节点名称:"+n.getName()+"t"+n.getText());
}
//选择id属性的book元素
List<Attribute> attList=doc.selectNodes("//book/@id");
for(Attribute att:attList){
System.out.println("属性的名称:"+att.getName()+"t"+att.getText());
}
}
}
3、输出结果?
4、有关API注解?
相关xpath技术请参考xpath api文档
----------------------------------------------------百战卓越060天--------------