dom4j与xpath
2015-12-30 15:58
239 查看
DOM4J与Xpath~
(2007-06-18 17:05:20)转载▼
标签: | 分类: 学习 |
要从 XML 文档中提取信息,最快捷简单的办法就是在程序中嵌入 XPath 表达式。XPath是一种为查询 XML 文档而设计的查询语言(其他查询语言还包括结构化查询语言——SQL针对查询特定类型的关系库而设计和优化的语言以及对象查询语言(OQL)和
XQuery等)。XPath 表达式比繁琐的文档对象模型(DOM)导航代码要容易编写得多(Java 5 推出了javax.xml.xpath 包,这是一个用于 XPath 文档查询的独立于 XML 对象模型的库)。
1:XML常识整理
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author> <year>2005</year>
<price>29.99</price>
</book>
</bookstore>
(1)上面举例的XML文档中,节点类型有:
<bookstore>(document node)
<author>(element node)
lang(attribute node)
(2)节点间的关系有父亲、子、兄、祖:
book元素是title,author,year和price的父亲
title,author,year和price元素都是book元素的子元素
title, author, year, 和 price元素都为兄弟
book元素和bookstore元素都为title元素的祖元素
2XPATH选择节点时常用的路径表达式:
nodename——选择所有目前节的子节
/ ——从根节进行选择
//——选择文档中相吻合的节而不管其在文档的何处
. ——选择当前节
..——当前节的父节
@——选择属性
举例如下:
bookstore——选择所有bookstore元素的子节
/bookstore——选择了bookstore的根元素。注意:如果路径的开始为(/)那此路径一定是到该元素的绝对路径
bookstore/book——选择了所有在bookstore的子元素book元素所包含的所有元素(其实就为bookstore里book元素所包含的元素)
//book——选择所有为book元素的内容而不管book元素处于何处(有不同的父也没关系)
bookstore//book——在bookstore元素内所有含有book元素的元素内容(只要book元素的祖元素为bookstore元素那都符合条件)
//@lang——选择所有属性名为lang的属性
3XPath 数据模型
XPath 1.0 只有四种基本数据类型:
node-set
number
boolean
string
4XPath 表达式
多数 XPath 表达式,特别是位置路径,都返回节点集。
也可以返回其他如:
XPath 表达式 count(//book) 返回文档中的图书数量
XPath 表达式count(//book[@author="Neal Stephenson"]) > 10 返回一个布尔值,如果文档中 Neal Stephenson 的著作超过 10 本则返回 true,否则返回 false。
evaluate() 方法被声明为返回 Object。实际返回什么依赖于 XPath 表达式的结果以及要求的类型。
5DOM4J中的XPATH调用表达式
取某一节点
Element root = (Element) document.selectSingleNode("//root");
取某一节点的属性
Attribute attribute = (Attribute) document.selectSingleNode(//root/cell/@value);
根据笔记尝试使用dom4j中的xpath,主要代码如下:
List list=document.selectNodes("//@cout");
for (Iterator iter = list.iterator(); iter.hasNext(); )
{
Attribute attribute = (Attribute) iter.next();
String type = attribute.getValue();
System.out.println(type);
}
运行,显示错误:找不到xxxclass之类的。
在网上搜了一下,尝试将jaxen-1.1-beta-6.jar导入项目可用库,并在程序中添加import org.jaxen.*;程序提示该引用在程序中未使用~不管它先~执行,成功显示结果!
将import org.jaxen.*;去掉;仍然可以正确显示结果~!!!看来解决错误的是“将jaxen-1.1-beta-6.jar导入项目可用库”,估计是DOM4J中使用XPATH时调用了该库。不想深入多。解决问题足以~
分享:
相关文章推荐
- javascript实现图片上传前台页面
- 手工分页的方法
- Unix或Linux中&、jobs、fg、bg等命令的使用方法
- YXBBS 2.3论坛系统后台拿shell 转自红黑联盟
- Linux 前台 和 后台进程 说明 .
- 使用jquery不刷新前台页面完成提交表单的例子
- Spring MVC中使用ExtJS上传文件
- 修改织梦广告,前台不更新或者不显示的解决办法
- 黑马程序员_为什么要用多线程
- 前台向后台传递中文值时 乱码
- 判断App是否在后台运行,判断App后台运行
- 前台调试小技巧
- 前台--一个css冲突导致的ie6崩溃
- 前台--关于引用外部js文件的格式
- canvas实现和时钟效果
- 前台jsp控件获取java后台返回的值
- 前台疑难杂症类似的用法
- js打开新窗口的各种方法
- js文件从Struts2 Action中获取数据全过程
- 前台报错:登陆失败,应用程序发生异常。这是怎么回事?