Dom4j学习笔记--第二篇

来源:互联网 发布:手机淘宝图片尺寸 编辑:程序博客网 时间:2024/06/06 00:10
3.高级节点查询XPath(推荐方法)

    采用xpath查找需要引入jaxen-xx-xx.jar,否则会报"java.lang.NoClassDefFoundError: org/jaxen/JaxenException"异常。

    public List selectNodes(String xpathExpression)
        
        selectNodes evaluates an XPath expression and returns the result as a List of Node instances or String instances depending on the XPath expression.
        翻译--selectNodes评估一个XPath表达式,并将结果返回为一组节点实例或字符串实例根据XPath表达式。

        Parameters:
            xpathExpression - is the XPath expression to be evaluated
            翻译--xpathExpression——是XPath表达式进行评估
            备注:其实就是传入一个合法的XPath的表达式,类似于正则表达式的东西

        Returns:
            the list of Node or String instances depending on the XPath expression
            翻译--节点的列表或字符串实例根据XPath表达式
            返回节点的文本内容,或是子节点的列表

    public Node selectSingleNode(String xpathExpression)

        selectSingleNode evaluates an XPath expression and returns the result as a single Node instance. 
        翻译--selectSingleNode评估一个XPath表达式,并返回结果作为一个单独的节点实例。
        备注:如果是想查找某一个节点,可以使用这个方法

        Parameters:
            xpathExpression - is the XPath expression to be evaluated
            翻译-- xpathExpression——是XPath表达式进行评估
            备注:其实就是传入一个合法的XPath的表达式,类似于正则表达式的东西

        Returns:
            the Node matching the XPath expression
            翻译--节点匹配XPath表达式
            备注:返回查找到符合条件的Node节点

4.XPath语法规则

   
     //查找mysql下的user节点内容
    Node userNode = document.selectSingleNode("config/dbinfo/mysql/user");
    System.out.println(userNode.getText());
     //查找mysql下的password节点内容
    Node passWordNode = document.selectSingleNode("config/dbinfo/mysql/password");
    System.out.println(passWordNode.getText());

    1.选取节点--XPath 使用路径表达式在 XML 文档中选取节点,节点是沿着路径或者 step 来选取的
nodename
选取当前节点的所有子节点
/
从根节点选取
//
从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.
选取当前节点
..
选取当前节点的父节点
@
选取属性


bookstore选取 bookstore 元素的所有子节点/bookstore选取根元素 bookstorebookstore/book选取bookstore 下名字为 book的所有子元素//book选取所有 book 子元素,而不管它们在文档中的位置bookstore//book选取bookstore 下名字为 book的所有后代元素,而不管它们位于 bookstore 之下的什么位置//@lang选取所有名为 lang 的属性

    2.谓语--谓语用来查找某个特定的节点或者包含某个指定的值的节点--谓语被嵌在方括号中
/bookstore/book[1]
选取属于 bookstore 子元素的第一个 book 元素
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素//title[@lang]选取所有拥有名为 lang 的属性的 title 元素
//title[@lang='eng']
选取所有 title 元素,要求这些元素拥有值为 eng 的 lang 属性
/bookstore/book[price>35.00]
选取所有 bookstore 元素的 book 元素,要求book元素的子元素 price 元素的值须大于 35.00
/bookstore/book[price>35.00]/title
选取所有 bookstore 元素中的 book 元素的 title 元素,要求book元素的子元素 price 元素的值须大于 35.00
    
    3.选取未知节点
*
匹配任何元素节点
@*
匹配任何属性节点
node()
匹配任何类型的节点
/bookstore/*
选取 bookstore 元素的所有子节点
//*
选取文档中的所有元素
//title[@*]选取所有带有属性的 title 元素    
    4.选取若干路径
//book/title | //book/price
选取所有 book 元素的 title 和 price 元素
//title | //price
选取所有文档中的 title 和 price 元素
/bookstore/book/title|//price
选取所有属于 bookstore 元素的 book 元素的 title 元素,以及文档中所有的 price 元素
    
      5.XPath轴
ancestor
选取当前节点的所有先辈(父、祖父等)
ancestor-or-self
选取当前节点的所有先辈(父、祖父等)以及当前节点本身
attribute
选取当前节点的所有属性
child
选取当前节点的所有子元素
descendant选取当前节点的所有后代元素(子、孙等)descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身
following
选取文档中当前节点的结束标签之后的所有节点
namespace选取当前节点的所有命名空间节点parent选取当前节点的父节点preceding选取文档中当前节点的开始标签之前的所有节点
preceding-sibling
选取当前节点之前的所有同级节点
self选取当前节点
   
    6.路径
  • 位置路径表达式--位置路径可以是绝对的,也可以是相对的,绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割
  • 绝对位置路径
  • 相对位置路径
  • 步(step)包括--轴(axis)--定义所选节点与当前节点之间的树关系.节点测试(node-test)--识别某个轴内部的节点.零个或者更多谓语((predicate )更深入地提炼所选的节点集.
child::book
选取所有属于当前节点的子元素的 book 节点
attribute::lang
选取当前节点的 lang 属性
child::*
选取当前节点的所有子元素
attribute::*
选取当前节点的所有属性
child::text()
选取当前节点的所有文本子节点
child::node()
选取当前节点的所有子节点
descendant::book选取当前节点的所有 book 后代ancestor::book选择当前节点的所有 book 先辈ancestor-or-self::book选取当前节点的所有book先辈以及当前节点(假如此节点是book节点的话)child::*/child::price选取当前节点的所有 price 孙

    7.XPath运算符
|
计算两个节点集
//book | //cd
返回所有带有 book 和 ck 元素的节点集
+
加法
6+4
10
-
减法
6-4
2
*
乘法
6*4
24
div
除法
8div4
2
=
等于
price=9.80

如果 price 是 9.80,则返回 true。

如果 price 是 9.90,则返回 fasle。

!=不等于price!=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 fasle。

<小于price<9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 fasle。

<=小于等于price<=9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 fasle。

>大于price>9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 fasle。

>=大于等于price>=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.70,则返回 fasle。

or或price=9.80 or price=9.70

如果 price 是 9.80,则返回 true。

如果 price 是 9.50,则返回 fasle。

and与price>9.00 and price<9.90

如果 price 是 9.80,则返回 true。

如果 price 是 8.50,则返回 fasle。

mod求余数5 mod 21