dom4j操作xpath

8 篇文章 1 订阅
使用dom4j支持XPATH操作:
         可以直接获取到目标元素,不需要层层解析。
         
          第一种形式:/AAA/DDD/BBB:表示一层一层的,AAA下面DDD下面的BBB
          第二种形式://BBB:表示和这个名称相同,只要名称是BBB,都能得到
          第三种形式:/*:表示所有元素
          第四种形式:BBB[1]:表示第一个BBB元素  、 BBB[last()]:表示最后一个元素
          第五种形式://BBB[@id]:表示只要BBB元素上面有id属性都能得到
          第六种形式://BBB[@id='XXX']:表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是XXX
          
          使用dom4j默认不支持xpath,所以要导包
          在dom4j中提供了两个方法用来支持xpath
          1、selectNodes("xpath的表达式");获取多个节点

          2、selectSingleNode("xpath的表达式");获取一个节点

xml实例:

<?xml version="1.0" encoding="UTF-8"?>

<person> 
  <student id="hhh"> 
    <name>张三</name>  
    <age>300</age> 
  </student>  
  <student> 
    <name>李四</name>  
    <age>20</age> 
  </student> 
</person>

java代码:

import java.io.Reader;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Dom4j_xpath {

	public static void main(String[] args) {
		//getNames();
		getName();
	}
	/**
	 * 获得所有的目标标签
	 */
	private static void getNames() {
		try {
			//创建SAX解析器
			SAXReader reader = new SAXReader();
			//得到document
			Document document = reader.read("src/XPATH/Person.xml");
			//得到所有的name元素
			List<Node> list = document.selectNodes("//name");
			//遍历  增强for循环
			for (Node name : list) {
				//得到name的值
				String s = name.getText();
				System.out.println(s);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	private static void getName() {
		try{
			//创建SAX解析器
			SAXReader reader = new SAXReader();
			//得到document
			Document document = reader.read("src/XPATH/Person.xml");
			//得到目标元素
			Node name = document.selectSingleNode("//student[@id='hhh']/name");
			//得到目标元素中的值
			String s = name.getText();
			System.out.println(s);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值