您好,欢迎访问一九零五行业门户网

XPath技术

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技术 的内容。
其它类似信息

推荐信息