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手艺 的内容,更多相关内容请关注ki4网(www.ki4.cn)!