xpath技术
基本概述
xpath即为xml路径语言,它是一种用来确定xml(标准通用标记语言的子集)文档中某部分位置的语言。xpath基于xml的树状结构,提供在数据结构树中找寻节点的能力。起初 xpath 的提出的初衷是将其作为一个通用的、介于xpointer与xslt间的语法模型。但是 xpath 很快的被开发者采用来当作小型查询语言。
ps:其配合dom4j解析技术,弥补了dom4j不能跨层取元素的缺点。需要引入jaxen-1.1-beta-6.jar包。
xpath原理 xpath就好比sql查询语句,能够对dom树进行查询操作,并获取相应结果。
xpath案例xml9.xml
<?xml version="1.0" encoding="utf-8"?>
<aaa>
<bbb id="b1">hello world b1</bbb>
<ccc id="c1"/>
<bbb id="b2">hello world b2</bbb>
<bbb>hello world b3</bbb>
<ddd>
<bbb id="b3">hello world b4</bbb>
</ddd>
<ccc>
<ddd>
<bbb id="b4"/>
<bbb id="b5"/>
</ddd>
</ccc>
</aaa>
package com.pc;
import java.io.file;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.filewriter;
import java.io.ioexception;
import java.io.unsupportedencodingexception;
import java.util.iterator;
import java.util.list;
import org.dom4j.attribute;
import org.dom4j.document;
import org.dom4j.documentexception;
import org.dom4j.documenthelper;
import org.dom4j.element;
import org.dom4j.io.outputformat;
import org.dom4j.io.saxreader;
import org.dom4j.io.xmlwriter;
/**
*
* @author switch
* @function dom4j配合xpath
*
*/
public class xml9 {
public static void main(string[] args) throws exception {
// 1.得到saxreader解析器
saxreader saxreader = new saxreader();
// 2.指定解析哪个文件
document document = saxreader.read("src/com/pc/xml9.xml");
// 3.使用xpath随意读取任何一层的元素
// document.selectnodes(); //返回多个元素
// document.selectsinglenode(); // 返回一个元素
// 取出aaa下面的所有bbb 3个
// list nodelist = document.selectnodes("/aaa/bbb");
// 取出所有的bbb 6个
// list nodelist = document.selectnodes("//bbb");
// system.out.println(nodelist.size());
// 取出aaa下面的ddd下面的最后一个bbb元素的内容 hello world b4
// list nodelist = document.selectnodes("/aaa/ddd//bbb[last()]");
// system.out.println(((element)nodelist.get(0)).gettexttrim());
// 取出aaa下面的ccc下面的ddd下面的所有元素 2个
// list nodelist = document.selectnodes("/aaa/ccc/ddd/*");
// 取出所有有三个祖先元素的bbb元素
// list nodelist = document.selectnodes("/*/*/*/bbb");
// system.out.println(nodelist.size());
// 取出aaa下面的第一个bbb元素的内容 hello world b1
// list nodelist = document.selectnodes("/aaa/bbb[1]");
// system.out.println(((element)nodelist.get(0)).gettexttrim());
// element element = (element) document.selectsinglenode("/aaa/bbb[1]");
// system.out.println(element.gettexttrim());
// 取出所有有id属性的元素的id属性 5个
// list nodelist = document.selectnodes("//@id");
// system.out.println(nodelist.size());
// 取出第一个有id属性的元素的id属性的值 b1
// system.out.println(((attribute)nodelist.get(0)).gettext());
// 取出所有有id属性的ccc元素
// list nodelist = document.selectnodes("//ccc[@id]");
// system.out.println(nodelist.size());
// "//bbb[@*]" 选择有任意属性的bbb元素
// "//bbb[not(@*)]" 选择没有属性的bbb元素
// "//bbb[@id='b1']" 选择含有属性id且其值为'b1'的bbb元素
// 选择含有属性id且其值(在用normalize-space函数去掉前后空格后)为'b2'的bbb元素
// "//bbb[normalize-space(@id)='b2']"
// "//*[count(bbb)=2]" 选择含有2个bbb子元素的元素
// "//*[name()='bbb']" 选择所有名称为bbb的元素(这里等价于//bbb)
// "//*[starts-with(name(),'b')]" 选择所有名称以"b"起始的元素
// "//*[contains(name(),'c')]" 选择所有名称包含"c"的元素
// "//*[string-length(name()) = 3]" 选择名字长度为3的元素
// "//*[string-length(name()) < 4]" 选择名字长度小于3的元素
// 同样的将<替换成大于号则是大于
// 11个
// list nodelist = document.selectnodes("//*[string-length(name()) < 4]");
// system.out.println(nodelist.size());
// "//ccc | //bbb" 选择所有的ccc和bbb元素
}
}
ps:通过上述案例中的xpath语句,基本的xml查询,使用是没问题的。
以上就是xpath技术 的内容。