1、 xpath 是 XML 标记语言的查询语言,是 XQUERY , XSL 的基础,也是访问 XML-DOM 的有效方法, Xpath 提供了路径查询,简单运算,和过百中函数。以下为 www.w3school.com.cn的 XPATH 教程笔记。
源码 -XML
<? xml version = "1.0" encoding = "ISO-8859-1" ?>
<bookstore>
<book category = "COOKING" >
<title lang = "en" > Everyday Italian </title>
<author> Giada De Laurentiis </author>
<year> 2005 </year>
<price> 30.00 </price>
</book>
<book category = "CHILDREN" >
<title lang = "eng" > Harry Potter </title>
<author> J K. Rowling </author>
<year> 2005 </year>
<price> 29.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > XQuery Kick Start </title>
<author> James McGovern </author>
<author> Per Bothner </author>
<author> Kurt Cagle </author>
<author> James Linn </author>
<author> Vaidyanathan Nagarajan </author>
<year> 2003 </year>
<price> 49.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > Learning XML </title>
<author> Erik T. Ray </author>
<year> 2003 </year>
<price> 39.95 </price>
</book>
</bookstore>
2、 路径选择符
表达式 | 描述 |
nodename | 选取此节点的所有子节点 |
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
[] | 条件匹配符 |
例如:
A 、 Bookstore 和 / 时返回 <bookstore> 在内的所有节点,即上页 XML 中除了第一行的所有内容。
B 、 //book 返回所有 <book>…</book> 节中的内容,不含含 <book> 标签。
<title lang = "en" > Everyday Italian </title>
<author> Giada De Laurentiis </author>
<year> 2005 </year>
<price> 30.00 </price>
<title lang = "eng" > Harry Potter </title>
<author> J K. Rowling </author>
<year> 2005 </year>
<price> 29.99 </price>
<title lang = "en" > XQuery Kick Start </title>
<author> James McGovern </author>
<author> Per Bothner </author>
<author> Kurt Cagle </author>
<author> James Linn </author>
<author> Vaidyanathan Nagarajan </author>
<year> 2003 </year>
<price> 49.99 </price>
<title lang = "en" > Learning XML </title>
<author> Erik T. Ray </author>
<year> 2003 </year>
<price> 39.95 </price>
C 、 //title 和 //author //year //price, 则返回相应节的内容,如: //title
Everyday ItalianHarry PotterXQuery Kick StartLearning XML
D 、 //title[@lang] 选取具有 lang 属性的 title 元素, //title[@lang=”eng”] 选取 lang 属性为
eng 的 title 元素。
Harry Potter
E 、 //title/.. 等同 //book ; //title/. 等同 //title
F 、 //. 选取当前匹配的任意节点,等同于 / + //book+//title+//author+//year+//price
<bookstore>
<book category = "COOKING" >
<title lang = "en" > Everyday Italian </title>
<author> Giada De Laurentiis </author>
<year> 2005 </year>
<price> 30.00 </price>
</book>
<book category = "CHILDREN" >
<title lang = "eng" > Harry Potter </title>
<author> J K. Rowling </author>
<year> 2005 </year>
<price> 29.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > XQuery Kick Start </title>
<author> James McGovern </author>
<author> Per Bothner </author>
<author> Kurt Cagle </author>
<author> James Linn </author>
<author> Vaidyanathan Nagarajan </author>
<year> 2003 </year>
<price> 49.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > Learning XML </title>
<author> Erik T. Ray </author>
<year> 2003 </year>
<price> 39.95 </price>
</book>
</bookstore>
<book category = "COOKING" >
<title lang = "en" > Everyday Italian </title>
<author> Giada De Laurentiis </author>
<year> 2005 </year>
<price> 30.00 </price>
</book>
<book category = "CHILDREN" >
<title lang = "eng" > Harry Potter </title>
<author> J K. Rowling </author>
<year> 2005 </year>
<price> 29.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > XQuery Kick Start </title>
<author> James McGovern </author>
<author> Per Bothner </author>
<author> Kurt Cagle </author>
<author> James Linn </author>
<author> Vaidyanathan Nagarajan </author>
<year> 2003 </year>
<price> 49.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > Learning XML </title>
<author> Erik T. Ray </author>
<year> 2003 </year>
<price> 39.95 </price>
</book>
<title lang = "en" > Everyday Italian </title>
<author> Giada De Laurentiis </author>
<year> 2005 </year>
<price> 30.00 </price>
Everyday ItalianGiada De Laurentiis200530.00
<title lang = "eng" > Harry Potter </title>
<author> J K. Rowling </author>
<year> 2005 </year>
<price> 29.99 </price>
Harry PotterJ K. Rowling200529.99
<title lang = "en" > XQuery Kick Start </title>
<author> James McGovern </author>
<author> Per Bothner </author>
<author> Kurt Cagle </author>
<author> James Linn </author>
<author> Vaidyanathan Nagarajan </author>
<year> 2003 </year>
<price> 49.99 </price>
XQuery Kick StartJames McGovernPer BothnerKurt CagleJames LinnVaidyanathan Nagarajan200349.99
<title lang = "en" > Learning XML </title>
<author> Erik T. Ray </author>
<year> 2003 </year>
<price> 39.95 </price>
Learning XMLErik T. Ray200339.95
G 、其他
路径表达式 | 结果 |
/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 元素,且其中的 price 元素的值须大于 35.00 。 |
/bookstore/book[price>35.00]/title | 选取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值须大于 35.00 。 |
3、 xpath 通配符
通配符 | 描述 |
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
A 、 * 等同与 bookstore 和 //book/..
B 、 //@* 匹配所有的属性值
COOKINGenCHILDRENengWEBenWEBen
C 、 //title[@*] 匹配所有的 title 元素
Everyday ItalianHarry PotterXQuery Kick StartLearning XML
D 、 //* 匹配所有元素
<book category = "COOKING" >
<title lang = "en" > Everyday Italian </title>
<author> Giada De Laurentiis </author>
<year> 2005 </year>
<price> 30.00 </price>
</book>
<book category = "CHILDREN" >
<title lang = "eng" > Harry Potter </title>
<author> J K. Rowling </author>
<year> 2005 </year>
<price> 29.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > XQuery Kick Start </title>
<author> James McGovern </author>
<author> Per Bothner </author>
<author> Kurt Cagle </author>
<author> James Linn </author>
<author> Vaidyanathan Nagarajan </author>
<year> 2003 </year>
<price> 49.99 </price>
</book>
<book category = "WEB" >
<title lang = "en" > Learning XML </title>
<author> Erik T. Ray </author>
<year> 2003 </year>
<price> 39.95 </price>
</book>
<title lang = "en" > Everyday Italian </title>
<author> Giada De Laurentiis </author>
<year> 2005 </year>
<price> 30.00 </price>
Everyday ItalianGiada De Laurentiis200530.00
<title lang = "eng" > Harry Potter </title>
<author> J K. Rowling </author>
<year> 2005 </year>
<price> 29.99 </price>
Harry PotterJ K. Rowling200529.99
<title lang = "en" > XQuery Kick Start </title>
<author> James McGovern </author>
<author> Per Bothner </author>
<author> Kurt Cagle </author>
<author> James Linn </author>
<author> Vaidyanathan Nagarajan </author>
<year> 2003 </year>
<price> 49.99 </price>
XQuery Kick StartJames McGovernPer BothnerKurt CagleJames LinnVaidyanathan Nagarajan200349.99
<title lang = "en" > Learning XML </title>
<author> Erik T. Ray </author>
<year> 2003 </year>
<price> 39.95 </price>
Learning XMLErik T. Ray200339.95
4、 xpath 轴
轴名称 | 结果 |
ancestor | 选取当前节点的所有先辈(父、祖父等) |
ancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身 |
attribute | 选取当前节点的所有属性 |
child | 选取当前节点的所有子元素。 |
descendant | 选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following | 选取文档中当前节点的结束标签之后的所有节点。 |
namespace | 选取当前节点的所有命名空间节点 |
parent | 选取当前节点的父节点。 |
preceding | 选取文档中当前节点的开始标签之前的所有节点。 |
preceding-sibling | 选取当前节点之前的所有同级节点。 |
self | 选取当前节点。 |
例子 | 结果 |
|
//child::book | 选取所有属于当前节点的子元素的 book 节点 | =//book |
//attribute::lang | 选取当前节点的 lang 属性 | enengenen |
//child::* | 选取当前节点的所有子元素 | =//* |
//attribute::* | 选取当前节点的所有属性 | COOKINGenCHILDRENengWEBenWEBen |
child::text() | 选取当前节点的所有文本子节点 |
|
//child::node() | 选取当前节点的所有子节点 | =//* |
//descendant::book | 选取当前节点的所有 book 后代 | |
//ancestor::title | 选择当前节点的所有 title 先辈 | Everyday ItalianHarry PotterXQuery Kick StartLearning XML |
选取当前节点的所有book 先辈以及当前节点(假如此节点是book 节点的话) | =//book | |
//child::* /child::price | 选取当前节点的所有 price 孙。 | 30.0029.9949.9939.95 |