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="/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="/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());//获取所有的authorSystem.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天--------------