您的位置:首页 > 其它

dom4j与xpath

2015-12-30 15:58 239 查看


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

 

 

 

 

 

   

分享: 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  前台