dom4j与xpath

DOM4J与Xpath~

  (2007-06-18 17:05:20)
标签: 

dom4j

 

xpath

分类: 学习
         今天的笔记:
 

  要从 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时调用了该库。不想深入多。解决问题足以~

 

 

 

 

 

   



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值