1. XPATH基础
XPATH遵循文档对象模型(DOM)的路径格式,基本语法由表达式构成。在计算表达式的值之后产生一个对象,
这种对象有以下四种基本类型:节点集合、布尔型、数字型和字符串型。
XPATH基本上和在文件系统中寻找文件类似,如果路径是以"/"开头的,就表明该路径表示的是一个绝对路径,
这和在UNIX系统中关于文件路径的定义是一致的。以"//"开头则表示在文档中的任意位置查找。
2. 以样例XML文档(friends.xml)为例来了解XPATH:
<?xml version="1.0" encoding="UTF-8"?>
<friends comment="Friends List">
<friend number="1">
<name>zoof</name>
<sex value="male" />
<phone>87654321</phone>
</friend>
<friend number="2">
<name>joe</name>
<sex value="male" />
<phone>87654322</phone>
</friend>
<friend number="3">
<name>joe</name>
<sex value="female" />
<phone>87654323</phone>
</friend>
</friends>
在XML文档中使用位置路径表达式来查找信息,这些表达式有很多种组成方式。
一般我们用得最多的恐怕是 节点元素 查找。XPATH中用正斜杠(/)来分隔子结点,
返回所有与模式相匹配的元素。
3. 下面以几个 表达式 的例子来说明一下返回结果:
表达式:/friends/friend 返回:根元素friends下所有的 friend 元素(或节点)。
注意:当然本例只有一个啦!
表达式:/friends/* 返回:根元素friends下所有的元素(或节点)。
注意:"*"相当于通配符,表示“所有”的
表达式://friend 返回:任意元素(或节点)下的所有 friend 元素(或节点)。
注意:不仅仅是1中 根元素friends下面的friend元素,如果存在的话)
表达式:/friends/friend[@number='1']
返回:根元素下元素名称为 friend,number属性为'1'的全部元素(或节点)。
注意:对于元素或节点的附加元素,比如属性,函数等都要用方括号"[]"扩起来,
属性前面要加上"@"号
表达式:/friends/friend/phone[text()='87654321']
返回:元素friends/friend下电话号码为 87654321 的全部元素。
注意:text()是XPATH的函数,功能是取出当前节点的文本内容,即content。、
表达式://name/parent::* 返回:name元素的所有父元素(或节点)。
(parent::* 表示这个元素的所有的父节点的集合)
上面的介绍对于我们一般的应用基本上够用了,如果你需要进一步的深入,
请查看W3C发布的关于XAPH的官方资料。
4. JDOM的关于XPATH的api只有一个类:
Xpath.java,在org.jdom.xpath这个包中。
核心方法主要是两个静态方法 :selectNodes()和selectSingleNode()。
前者根据一个xpath语句返回一组节点:List;
后者根据一个xpath语句返回符合条件的第一个节点:Object。
public static List selectNodes(Object arg1,String arg2) throws org.jdom.JDOMException;
public static Object selectSingleNode(Object arg1,String arg2) throws org.jdom.JDOMException;
在使用XPATH之前,请先确定你的classpath路径里面有如下几个JAR包,如果没有,请从JDOM的发行包中lib目录下copy:
saxpaht.jar
jaxen-core.jar
jaxen-jdom.jar
5. 样列JAVA代码:
/*
* Created on 2004-11-17
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/package cyberobject.com.xpath;import java.io.IOException;
import java.util.List;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Text;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;/**
* @author wanghua
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class XpathSample {
public static void main(String[] args) throws JDOMException, IOException{
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build("friends.xml");
Element root = doc.getRootElement();
List list = XPath.selectNodes(root,"/friends/friend");
System.out.println("[info] Friends List:");
for(int ii = 0; ii < list.size(); ii++){
Element element = (Element)list.get(ii);
String number = element.getAttributeValue("number");
//String name = element.getChildText("name");
String name = ( (Text) XPath.selectSingleNode(element,"//friend[@number='" + number + "']/name/text()")).getTextNormalize(); //String sex = element.getChild("sex").getAttributeValue("value");
String sex = ((Element)XPath.selectSingleNode(element,"//friend[@number='" + number + "']/sex")).getAttributeValue("value");
//String phone = element.getChildText("phone");
String phone = ( (Text) XPath.selectSingleNode(element,"//friend[@number='" + number + "']/phone/text()")).getText();
System.out.println("No."+number);
System.out.println(" Name:[" + name + "]");
System.out.println(" Sex:[" + sex + "]");
System.out.println(" Phone:[" + phone + "]");
System.out.println();
}
System.out.println("[info] End of Friends List.");
}
}输出结果:[info] Friends List:
No.1
Name:[zoof]
Sex:[male]
Phone:[87654321]No.2
Name:[joe]
Sex:[male]
Phone:[87654322]No.3
Name:[joe]
Sex:[female]
Phone:[87654323][info] End of Friends List.
分享到:
相关推荐
赠送jar包:jdom2-2.0.6.jar; 赠送原API文档:jdom2-2.0.6-javadoc.jar; 赠送源代码:jdom2-2.0.6-sources.jar; 赠送Maven依赖信息文件:jdom2-2.0.6.pom; 包含翻译后的API文档:jdom2-2.0.6-javadoc-API文档-...
赠送jar包:jdom2-2.0.6.jar; 赠送原API文档:jdom2-2.0.6-javadoc.jar; 赠送源代码:jdom2-2.0.6-sources.jar; 赠送Maven依赖信息文件:jdom2-2.0.6.pom; 包含翻译后的API文档:jdom2-2.0.6-javadoc-API文档-...
jdom-1.0.jar,jdom-1.0.jar,jdom-1.0.jar,jdom-1.0.jar,jdom-1.0.jar
赠送jar包:jdom-1.1.jar; 赠送原API文档:jdom-1.1-javadoc.jar; 赠送源代码:jdom-1.1-sources.jar; 包含翻译后的API文档:jdom-1.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.jdom,...
jdom的jar包
赠送jar包:jdom-1.1.jar; 赠送原API文档:jdom-1.1-javadoc.jar; 赠送源代码:jdom-1.1-sources.jar; 包含翻译后的API文档:jdom-1.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:...
jdom-1.1.zip jdom-1.1.jar jdom.jar jdom库 jdom操作xml
jdom-1.0 jdom jdom-1.0,jdom解析xml
org.jdom2-2.0.6.LIFERAY-PATCHED-1.jar
在jdom中,如何快速的定位某个节点或者属性?我们如何直接取得它的xpath?使用jdom-contrib.jar包可以实现这个功能
JAVA的Jdom包,解析XML不可少
maven-model-jdom-support-3.0.3-sources.jar
java 的 jdom包,是jdom-1.1.1
jdom-2.0_6.zip
java 制作解析形式XML字符串 必须有JDOM这个包
The JDOM build system is based on Jakarta Ant, which is a Java building tool originally developed for the Jakarta Tomcat project but now used in many other Apache projects and extended by many ...
官方离线安装包,亲测可用
maven-model-jdom-support-3.0.x-1.1.jar
JDOM-API-DOCS.CHM,不过是一个英文版的.