XPath 示例

 

本主题回顾整个 XPath 参考中出现的语法示例。 所有示例均基于 XPath 语法的示例 XML 文件 (inventory.xml)。 有关在测试文件中使用 XPath 表达式的示例,请参见本主题最后的“联合 ( | ) 示例”。

 

Expression

引用

./author

当前上下文中的所有 <author> 元素。 注意,此表达式等效于下一行中的表达式。

author

当前上下文中的所有 <author> 元素。

first. name

当前上下文中的所有 <first.name> 元素。

/bookstore

此文档的文档元素 (<bookstore>)。

//author

文档中的所有 <author> 元素。

book[/bookstore/@specialty=@style]

style 属性值等于文档根处 <bookstore> 元素的specialty 属性值的所有 <book> 元素。

author/first-name

作为 <author> 元素子级的所有 <first-name> 元素。

bookstore//title

<bookstore> 元素中一级或多级深度的所有 <title> 元素(任意后代)。 注意,此表达式不同于下一行中的表达式。

bookstore/*/title

作为 <bookstore> 元素的孙代的所有 <title> 元素。

bookstore//book/excerpt//emph

位于 <book> 元素的 <excerpt> 子级内任意位置和位于<bookstore> 元素内任意位置的所有 <emph> 元素。

.//title

当前上下文中一级或多级深度的所有 <title> 元素。 注意,本质上只有这种情况需要句点表示法。

author/*

作为 <author> 元素子级的所有元素。

book/*/last-name

作为 <book> 元素的孙代的所有 <last-name> 元素。

*/*

当前上下文的所有孙级元素。

*[@specialty]

具有 specialty 属性的所有元素。

@style

当前上下文的 style 属性。

price/@exchange

当前上下文中 <price> 元素上的 exchange 属性。

price/@exchange/total

返回空节点集,因为属性不包含元素子级。 XML 路径语言 (XPath) 语法允许使用此表达式,但是严格意义上讲无效。

book[@style]

当前上下文的具有 style 属性的 <book> 所有元素。

book/@style

当前上下文的所有 <book> 元素的 style 属性。

@*

当前元素上下文的所有属性。

./first-name

当前上下文节点中的所有 <first-name> 元素。 注意,此表达式等效于下一行中的表达式。

first-name

当前上下文节点中的所有 <first-name> 元素。

author[1]

当前上下文节点中的第一个 <author> 元素。

author[first-name][3]

具有 <first-name> 子级的第三个 <author> 元素。

my:book

my 命名空间中的 <book> 元素。

my:*

my 命名空间中的所有元素。

@my:*

my 命名空间中的所有属性(不包括 my 命名空间中的元素的未限定属性)。

注意,索引相对于父级。 考虑以下数据:

 
 
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
 

Expression

引用

x/y[1]

每个 <x> 的第一个 <y> 子级。 此表达式等效于下一行中的表达式。

x/y[position() = 1]

每个 <x> 的第一个 <y> 子级。

(x/y)[1]

<x> 元素的整个 <y> 子级集合中的第一个 <y>。

x[1]/y[2]

第一个 <x> 的第二个 <y> 子级。

其他示例引用 XPath 的示例 XML 文件。

 

Expression

引用

book[last()]

前上下文节点的最后一个 <book> 元素。

book/author[last()]

前上下文节点的每个 <book> 元素的最后一个<author> 子级。

(book/author)[last()]

当前上下文节点的 <book> 元素的整个 <author> 子级集合中的最后一个 <author> 元素。

book[excerpt]

包含至少一个 <excerpt> 元素子级的所有 <book> 元素。

book[excerpt]/title

作为 <book> 元素子级,同时包含至少一个 <excerpt>元素子级的所有 <title> 元素。

book[excerpt]/author[degree]

包含至少一个 <degree> 元素子级,并作为同样包含至少一个 <excerpt> 元素的 <book> 元素的子级的所有<author> 元素。

book[author/degree]

包含 <author> 子级,这些子级又包含至少一个<degree> 子级的所有 <book> 元素

author[degree][award]

包含至少一个 <degree> 元素子级和至少一个 <award>元素子级的所有 <author> 元素。

author[degree and award]

包含至少一个 <degree> 元素子级和至少一个 <award>元素子级的所有 <author> 元素。

author[(degree or award) and publication]

包含至少一个 <degree> 或 <award> 和至少一个<publication> 作为子级的所有 <author> 元素。

author[degree and not(publication)]

包含至少一个 <degree> 元素子级并且不包含<publication> 元素子级的所有 <author> 元素。

author[not(degree or award) and publication]

包含至少一个 <publication> 元素子级,但不包含<degree> 或 <award> 元素子级的所有 <author> 元素。

author[last-name = "Bob"]

包含至少一个值为 Bob 的 <last-name> 元素子级的所有 <author> 元素。

author[last-name[1] = "Bob"]

第一个 <last-name> 子元素的值为 Bob 的所有<author> 元素。 注意,此表达式等效于下一行中的表达式。

author[last-name [position()=1]= "Bob"]

第一个 <last-name> 子元素的值为 Bob 的所有<author> 元素。

degree[@from != "Harvard"]

from 属性不等于 "Harvard" 的所有 <degree> 元素。

author[. = "Matthew Bob"]

值为 Matthew Bob 的所有 <author> 元素。

author[last-name = "Bob" and ../price &gt; 50]

包含值为 Bob 的 <last-name> 子元素和值大于 50 的<price> 同级元素的所有 <author> 元素。

book[position() &lt;= 3]

前三本书(1、2、3)。

author[not(last-name = "Bob")]

不包含值为 Bob 的 <last-name> 子元素的所有<author> 元素。

author[first-name = "Bob"]

至少有一个值为 Bob 的 <first-name> 子级的所有<author> 元素。

author[* = "Bob"]

所有包含任何值为 Bob 的子元素的 author 元素。

author[last-name = "Bob" and first-name = "Joe"]

具有值为 Bob 的 <last-name> 子元素和值为 Joe 的<first-name> 子元素的所有 <author> 元素。

price[@intl = "Canada"]

上下文节点中 intl 属性等于 "Canada" 的所有 <price>元素。

degree[position() &lt; 3]

作为上下文节点子级的前两个 <degree> 元素。

p/text()[2]

上下文节点中每个 <p> 元素的第二个文本节点。

ancestor::book[1]

上下文节点最近的 <book> 上级。

ancestor::book[author][1]

上下文节点最近的 <book> 上级,并且此 <book> 元素具有 <author> 元素作为其子级。

ancestor::author[parent::book][1]

当前上下文最近的 <author> 上级,并且此 <author>元素是 <book> 元素的子级。

为了演示 union 运算,我们使用以下 XPath 表达式:

x | y/x

在以下 XML 文件中选择所有值为 green 或 blue 的 <x> 元素:

XML 文件 (data1.xml)

 
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="union.xsl"?>
<root>
<x>green</x>
<y>
<x>blue</x>
<x>blue</x>
</y>
<z>
<x>red</x>
<x>red</x>
</z>
<x>green</x>
</root>

XSLT 文件 (union.xsl)

 
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="root">
<xsl:for-each select="x | y/x">
<xsl:value-of select="."/>,
<xsl:if test="not(position()=last())">,</xsl:if>
</xsl:for-each>
</xsl:template> </xsl:stylesheet>

格式化输出

green,blue,blue,green

处理器输出

<?xml version="1.0" encoding="UTF-16"?>green,blue,blue,green

【转】XPath 示例的更多相关文章

  1. XPath语法 在C#中使用XPath示例 【转http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html】非常详细的文章

    XPath语法 在C#中使用XPath示例   XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: <?xml ve ...

  2. XPath语法 在C#中使用XPath示例

    XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: <?xml version="1.0" en ...

  3. C#操作Xml:XPath语法 在C#中使用XPath示例

    XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  4. xPath 用法总结整理

    xPath 用法总结整理   一.xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML ...

  5. odoo 开发基础 -- 视图之xpath语法

    odoo 视图函数 在整个项目文件中,结构并不是十分明显,虽然它也遵循MVC设计,类比django的MTV模式,各个模块区分的十分明显,在Odoo中,视图的概念不是特别明显,很多时候,我们会将调用模型 ...

  6. scrapy简单入门及选择器(xpath\css)

    简介 scrapy被认为是比较简单的爬虫框架,资料比较齐全,网上也有很多教程.官网上介绍了它的四种安装方法,PyPI.Conda.APT.Source,我们只介绍最简单的安装方法. 安装 Window ...

  7. 爬虫入门之爬取策略 XPath与bs4实现(五)

    爬虫入门之爬取策略 XPath与bs4实现(五) 在爬虫系统中,待抓取URL队列是很重要的一部分.待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪 ...

  8. 最完美的xslt数值函数与字符串函数(转)

    http://www.cnblogs.com/guoxu/articles/1744007.html 任何的编程语言或者是SQL语句都有内置的函数或方法,而强大灵活的xslt技术也是如此.熟练掌握XS ...

  9. HtmlAgilityPack相关网页

    //多线程 http://www.cnblogs.com/jiangming/archive/2012/09/11/MultiThreadCallWebbrowser.html //替换Webbrow ...

随机推荐

  1. Redis学习笔记1-Redis数据类型

    Redis数据类型 Redis支持5种数据类型,它们描述如下: Strings - 字符串 字符串是 Redis 最基本的数据类型.Redis 字符串是二进制安全的,也就是说,一个 Redis 字符串 ...

  2. Guacamole之配置Guacamole(五)

    摘要 在网上看到一篇Guacamole官方手册的翻译,但是找不到后续,于是想自己也翻译几篇,有时间的话,会尽量多翻译一些. 原文地址:http://guacamole.incubator.apache ...

  3. ECharts – 大数据时代,重新定义数据图表

    ECharts 基于 Canvas 的纯 Javascript 图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫游等特性大大增强了用户体验,赋予了用户对 ...

  4. 移动端-js触摸事件

    开发者工具 在移动开发中,一种较为容易的做法是,先在桌面上开始原型设计,然后再在打算要支持的设备上处理移动特有的部分.多点触摸正是难以在PC上进行测试的那些功能之一,因为大部分的PC都没有触摸输入. ...

  5. css3加载ing动画

    项目中ajax交互成功前总会需要给用户提醒,比如请稍候.正在加载中等等,那个等待的动图以前项目中用的是gif,在移动端画质很渣,有毛边,于是在新项目中用css3展示加载中的动画效果. function ...

  6. cordova 添加闪屏效果

    为项目添加SplashScreen插件 在Cordova项目目录运行: cordova plugin add apache.cordova.splashscreen 这个命令从插件git库下载插件代码 ...

  7. SharePoint 2013 内容部署报错

    错误信息 一 Export ran out of memory while compressing a very large file. To successfully export, turn co ...

  8. add host bat

    ::Author > mdt jindahao ::Data > @echo off title 添加记录到HOST--------Powerd by LoveQishi echo. ec ...

  9. ORA-03113解决方法

    场景: 碰到ORA-00257归档日志写满的解决方法这篇日志当中描述的归档日志写满的情况. 此时我想将数据库切换到非归档模式,参考如何启动或关闭oracle的归档(ARCHIVELOG)模式进行操作, ...

  10. iOS开发中常用的单例

    定义:一个类的对象,无论在何时创建.无论创建多少次,创建出来的对象都是同一个对象. 使用场景:当有一些数据需要共享给别的类的时候,就可以把这些数据保存在单例对象中.   关键代码: + (instan ...