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节点
//查找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 | 选取根元素 bookstore |
bookstore/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 2 | 1 |