dom4j获取指定节点值_XML解析之DOM4j以及XPATH技术

本文介绍了DOM4j作为Java XML API的特点和优势,包括其易用性和高性能。通过示例展示了如何使用DOM4j读取XML文件,并通过XPATH技术高效定位并获取XML节点。同时提到了在实际应用中使用XPath需要导入的相关库和参考文档。
摘要由CSDN通过智能技术生成

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、导包:

4e11c2995bee2fa1c654a2f1793e5b40.png

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、输出结果:

2027541fe6e835cfa062930a7058a186.png

注意:可以发现其实DOM4j与JDOM写法相似,一个是builer一个是reader


1、什么是XPATH?

在DOM4J解析中使用XPATH技术可以快速的获取节点。XPATH技术有点像正则表达式,是一种语法格式,通过这种语法可以快速捕获节点。

2、在使用XPATH技术快速获取节点需要做哪些准备工作?

需要将相应的jar包导入工程项目中,即DOM4J的jar包,Jaxen的jar包。同时若有需要还需要XPath的中文文档以供参考。

f853e738efb0b9e265904e4cc893e669.png

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、输出结果?

bc6138e0892160365197c550f997715a.png

4、有关API注解?

08ca4a6bdbedbb28da78ef82c1a01fa0.png

f875f94af14ca3e586171d1d3d6de9a2.png

83f48e4ffcdfd8d3336fecdad35b0212.png

35339c05b9f62bf7b5a044c90b4213f6.png

b8a087ba7a732907401efd3b7f5bd7fc.png

a4b21e10614df66e8855ee7fe9bf18b4.png

相关xpath技术请参考xpath api文档

----------------------------------------------------百战卓越060天--------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值