XPath知识小结.docx
- 文档编号:4957118
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:17
- 大小:22.05KB
XPath知识小结.docx
《XPath知识小结.docx》由会员分享,可在线阅读,更多相关《XPath知识小结.docx(17页珍藏版)》请在冰豆网上搜索。
XPath知识小结
运算符及特殊字符:
运算符/特殊字符
说明
/
此路径运算符出现在模式开头时,表示应从根节点选择。
//
从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。
.
当前上下文。
..
当前上下文节点父级。
*
通配符;选择所有元素节点与元素名无关。
(不包括文本,注释,指令等节点,如果也要包含这些节点请用node()函数)
@
属性名的前缀。
@*
选择所有属性,与名称无关。
:
命名空间分隔符;将命名空间前缀与元素名或属性名分隔。
()
括号运算符(优先级最高),强制运算优先级。
[]
应用筛选模式(即谓词,包括"过滤表达式"和"轴(向前/向后)")。
[]
下标运算符;用于在集合中编制索引。
|
两个节点集合的联合,如:
//messages/message/to|//messages/message/cc
-
减法。
div,
浮点除法。
and,or
逻辑运算。
mod
求余。
not()
逻辑非
=
等于
!
=
不等于
特殊比较运算符
<或者<
<=或者<=
>或者>
>=或者>=
需要转义的时候必须使用转义的形式,如在XSLT中,而在XMLDOM的scripting中不需要转义。
轴名称:
:
节点测试[谓语]
在XPath中,有七种类型的节点:
元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。
XPath的谓词即筛选表达式,类似于SQL的where子句.
轴
说明
ancestor:
:
上下文节点的上级。
上下文节点的上级由上下文节点的父级以及父级的父级等组成;因此,ancestor:
:
轴总是包括根节点,除非上下文节点就是根节点。
ancestor-or-self:
:
上下文节点及其上级。
ancestor-or-self:
:
轴总是包括根节点。
attribute:
:
上下文节点的属性。
除非上下文节点为元素,否则,此轴将是空的。
child:
:
上下文节点的子级。
子级是树中上下文节点以下紧邻的任何节点。
但是,属性节点或命名空间节点均不属于上下文节点的子级。
descendant:
:
上下文节点的子代。
子代是子级或子级的子级,等等;因此,descendant:
:
轴永远不会包含属性节点或命名空间节点。
descendant-or-self:
:
上下文节点及其子代。
following:
:
树中在上下文节点之后的所有节点,除了子代、属性节点和命名空间节点之外。
following-sibling:
:
上下文节点的所有后续同辈。
following-sibling:
:
轴只标识出现在树中上下文节点之后的父节点子级。
该轴不包括所有出现在上下文节点之前的其他子级。
如果上下文节点是属性节点或命名空间节点,following-sibling:
:
轴是空的。
namespace:
:
上下文节点的命名空间节点。
每个处于上下文节点范围内的命名空间都有一个命名空间节点。
除非上下文节点为元素,否则,此轴将是空的。
parent:
:
上下文节点的父级(如果有)。
父级是树中上下文节点以上紧邻的节点。
preceding:
:
树中在上下文节点之前的所有节点,除了上级、属性节点和命名空间节点之外。
有一种方法是,将preceding轴看作是内容全部出现在上下文节点开始之前的所有节点。
preceding-sibling:
:
上下文节点的所有前接同辈。
preceding-sibling:
:
轴只标识出现在树中上下文节点之前的父节点子级。
该轴不包括所有出现在上下文节点之后的其他子级。
如果上下文节点是属性节点或命名空间节点,preceding-sibling:
:
轴是空的。
self:
:
只是上下文节点本身。
名称测试
名称
返回
示例
*(星号)
对于任何主要节点类型的节点,返回True。
ancestor:
:
*选择上下文节点的所有上级。
attribute:
:
*选择上下文节点的所有属性。
namespace:
:
*选择上下文节点的所有名称属性。
QName
对于任何扩展名称等于QName指定的扩展名称的主要节点类型节点,返回True。
child:
:
para选择所有属于上下文节点子级的
如果上下文节点没有
NCName:
*
对于任何扩展名称包含NCName展开到的命名空间URI的主要节点类型节点(与本地名称无关),返回True。
节点类型测试
节点类型
返回
示例
comment()
对注释节点返回True。
following:
:
comment()选择所有出现在上下文节点之后的注释节点。
node()
对任何类型的节点返回True。
preceding:
:
node()选择所有出现在上下文节点之前的节点。
processing-instruction()
对处理指令节点返回True。
self:
:
processinginstruction()选择上下文节点中的所有处理指令节点。
text()
对文本节点返回True。
child:
:
text()选择属于上下文节点子级的文本节点。
优先级顺序
(从最高优先级到最低优先级)的定义如下表所示。
优先级
字符
用途
1
()
分组
2
[]
筛选器
3
///
路径运算
分组运算符()仅适用于顶级路径表达式。
例如,(//author/degree|//author/name)是有效的分组运算,但//author/(degree|name)不是。
筛选模式运算符([])的优先级高于路径运算符(/和//)。
例如,表达式//comment()[3]选择相对于文档中任意位置备注的父级索引等于3的所有备注。
此表达式与表达式(//comment())[3] 不同,后者选择相对于父级的所有备注集中的第三个备注。
前一个表达式可以返回多个备注,后一个表达式只能返回一个备注。
String函数
concat
返回参数的串联。
stringconcat(string,string,string*)
contains
如果第一个参数字符串包含第二个参数字符串,则返回true;否则,返回false。
normalize-space
返回去除了空白的参数字符串。
starts-with
如果第一个参数字符串以第二个参数字符串开头,则返回true;否则,返回false。
string
将对象转换为字符串。
string-length
返回字符串中的字符数。
substring
返回第一个参数中从第二个参数指定的位置开始、第三个参数指定的长度的子字符串。
substring-after
返回第一个参数字符串中第一次出现第二个参数字符串之后的子字符串。
substring-before
返回第一个参数字符串中第一次出现第二个参数字符串之前的子字符串。
translate
返回第一个参数字符串,出现第二个参数字符串中的字符的位置替换为第三个参数字符串中对应位置的字符。
数值函数
ceiling
返回不小于参数的最小整数。
floor
返回不大于参数的最大整数。
number
将参数转换为数字。
round
返回与参数最接近的整数值。
sum
返回节点集中所有节点的总和。
每个节点在求和之前先转换为数值。
节点集函数
count
返回node-set参数中的节点数。
id
按照唯一ID选择元素。
last
返回的数字等于表达式计算上下文的上下文大小。
local-name
返回node-set参数中按文档顺序处于第一位的节点的扩展名称本地部分。
name
返回的字符串包含一个QName,该QName表示node-set参数中按文档顺序处于第一位的节点的扩展名称。
namespace-uri
返回node-set参数中按文档顺序处于第一位的节点的扩展名称的命名空间统一资源标识符(URI)。
position
返回节点在父级中的索引号。
布尔函数
boolean
将参数转换为布尔值。
false
返回false。
lang
如果上下文节点的xml:
lang属性与参数字符串相同,则返回true。
not
如果参数为false,则返回true,否则,返回false。
true
返回true。
XSLT函数
名称
描述
current()
返回当前节点作为唯一成员的节点集。
apply-templatesselect="//glossary/item[@name=current()/@ref]"/> 处理所有具有 这不同于 apply-templatesselect="//glossary/item[@name=./@ref]"/> ,后者表示等同于 apply-templatesselect="//glossary/item[@name=@ref]"/> 所以,将处理所有具有 document() 用于访问外部XML文档中的节点。 node-setdocument(object,node-set? ) value-ofselect="document('celsius.xml')/celsius/result[@value=$value]"/> element-available() 检测XSLT处理器是否支持指定的元素。 format-number() stringformat-number(number,format,[decimalformat]) 参数 描述 number 必需。 规定要格式化的数字。 format 必需。 规定格式化模式。 这是用在格式化模式中的字符: ∙#(表示数字。 例如: ####) ∙0(表示“.”字符前面和后面的零。 例如: 0000.00) ∙.(小数点的位置。 例如: ###.##) ∙,(千的组分隔符。 例如: ###,###.##) ∙%(把数字显示为百分比。 例如: ##%) ∙;(模式分隔符。 第一个模式用于正数,第二个模式用于负数。 ) decimalformat 可选。 十进制格式名称。 function-available() 检测XSLT处理器是否支持指定的函数。 generate-id() 返回唯一标识指定节点的字符串值。 key() 检索以前使用 key>语句标记的元素。 此示例定义名为"title-search"的键,用于查找author属性等于"DavidPerry"的book元素。 keyname="title-search"match="book"use="@author"/> for-eachselect="key('title-search','DavidPerry')"> value-ofselect="@title"/> for-each> node-set 将树转换为节点集。 产生的节点集总是包含单个节点并且是树的根节点。 system-property() 返回系统属性的值。 unparsed-entity-uri() 返回未解析实体的URI。 XSLT元素 xsl: apply-imports 调用重写模板规则。 xsl: apply-templates 指示XSLT处理器根据每个选定节点的类型和上下文找到适合应用的模板。 xsl: attribute 创建一个属性节点并将其附加到输出元素上。 xsl: attribute-set 定义命名的属性集。 xsl: call-template 按名称调用模板。 xsl: choose 提供多个与 otherwise>元素和 when>元素有关的条件测试。 xsl: comment 在输出中生成注释。 xsl: copy 将当前节点从源复制到输出。 xsl: copy-of 将子树和结果树片断插入结果树。 xsl: decimal-format 声明一个小数格式,用于控制format-number函数所使用的格式模式的解释。 xsl: element 在输出中创建指定名称的元素。 xsl: fallback 调用可以为遇到的新元素的行为提供适合的替代行为的模板内容。 xsl: for-each 重复应用模板,对节点集中的每个节点应用模板。 xsl: if 允许简单条件模板片断。 xsl: import 导入另一个XSLT文件。 xsl: include 包含另一个XSLT文件。 xsl: key 声明一个命名的键,用于XML路径语言(XPath)表达式中的key()函数。 xsl: message 将文本消息发送到消息缓冲区或消息对话框。 xsl: namespace-alias 使用其他前缀替换与给定命名空间关联的前缀。 xsl: number 将格式化的数字插入结果树。 xsl: otherwise 提供多个与 choose>元素和 when>元素有关的条件测试。 xsl: output 指定在序列化结果树时要使用的选项。 xsl: param 声明一个命名的参数,在 stylesheet>元素或 template>元素中使用。 允许指定默认值。 xsl: preserve-space 在文档中保留空白。 xsl: processing-instruction 在输出中生成处理指令。 msxsl: script* 为脚本扩展定义全局变量和函数。 xsl: sort 指定 for-each>或 apply-templates>所选的节点列表的排序条件。 xsl: strip-space 从文档中删除空白。 xsl: stylesheet 指定XSLT文件的文档元素。 文档元素包含所有其他XSLT元素。 xsl: template 定义一个可再次使用的模板,用于为特定类型和上下文的节点生成所需的输出。 xsl: text 在输出中生成文本。 xsl: transform 执行与 stylesheet>相同的功能。 xsl: value-of 将选定节点的值作为文本插入。 xsl: variable 指定表达式中绑定的值。 xsl: when 提供多个与 choose>元素和 otherwise>元素有关的条件测试。 xsl: with-param 将参数传递给模板。 XPath表达式(缩写和详写方式) 表达式片段 缩写形式 child: : (可以完全省略) attribute: : @ self: : . parent: : .. /descendant-or-self: : node()/ // 1. 含义: 选择文档的根 未缩写的语法: / 缩写的语法: / 2. 含义: 选择当前节点的子节点中的所有para元素节点 未缩写的语法: child: : para 缩写的语法: para 3. 含义: 选择根节点中的子节点的所有para元素节点(注意与上一个例子的区别) 未缩写的语法: /child: : para 缩写的语法: /para 4. 含义: 选择当前节点的后代节点中的所有para元素节点 未缩写的语法: descendant: : para 缩写的语法: .//para 5. 含义: 选择根节点的后代节点中所有para元素节点(注意与上一个例子的区别) 未缩写的语法: /descendant: : para 缩写的语法: //para 6. 含义: 选择当前节点的所有id属性 未缩写的语法: attribute: : id 缩写的语法: @para 7. 含义: 选择当前节点的所有属性 未缩写的语法: attribute: : * 缩写的语法: @* 8. 含义: 选择当前节点的子节点中的第五个chapter元素节点 未缩写的语法: child: : chapter[position()=5] 缩写的语法: chapter[5] 9. 含义: 选择当前节点的子节点中id值为this-one的所有chapter元素节点 未缩写的语法: child: : chapter[attribute: : id=”this-one”] 缩写的语法: chapter[@id=”this-one”] 10. 含义: 选择属性值不为y的所有chapter元素节点 未缩写的语法: child: : chapter[not(attribute: : include=”y”)] 缩写的语法: chapter[@include =”y”] 11. 含义: 选择根节点中的后代中的所有文本节点(也就是文档中所有的文本节点) 未缩写的语法: /descendant: : text() 缩写的语法: //text() 12. 含义: 选择当前节点的子节点中的num属性值为1,draft属性值为y的所有part节点 未缩写的语法: child: : part[attribute: : num=”1”] [attribute: : draft=”y”] 缩写的语法: chapter[@num =”1”] [@draft =”y”] 13. 含义: 选择当前节点的父节点,如果该父节点由include属性且值为y 未缩写的语法: parent: : node()[attribute: : include=”y”] 缩写的语法: .. [@include =”y”] 14. 含义: 选择同时具有id属性和include属性的所有chapter元素节点(不管属性值是什么) 未缩写的语法: /descendant: : chapter[attribute: : id and attribute: : include] 缩写的语法: //chapter[@id and @include] 常用表达式实例: / DocumentRoot文档根. /* 选择文档根下面的所有元素节点,即根节点(XML文档只有一个根节点) /node() 根元素下所有的节点(包括文本节点,注释节点等) /text() 查找文档根节点下的所有文本节点 表达式 引用 x/y[1] 每个 (x/y)[1] x[1]/y[1] 第一个 author[1] 第一个 author[first-name][3] 具有 book[last()] 最后一个 book/author[last()] 每个 (book/author)[last()] (book/author) 属于当前上下文节点中任何 author[(degreeoraward)andpublication] 至少包含一个 book[excerpt] 至少包含一个 book[excerpt]/title 至少包含一个 book[excerpt]/author[degree] 至少包含一个 book[author/degree] 至少包含一个 book[excerpt][title] 至少包含一个 author[degreeandnot(publication)] 至少包含一个 author[not(degreeoraward)andpublication] 至少包含一个 author[last-name="Bob"andprice>50] 包含值为Bob的 degree[@from! ="Harvard"] from属性不等于"Harvard"的所有 author[last-name>="M"] 包含值以M或M以后的字母开头的 book[position()<=3] XML文件中的前三个 child: : *[position()=1] 定位上下文节点的第一个子节点。 ancestor-or-self: : book[@catdate="2000-12-31"] 定位上下文节点的任何 //parent: : node()[name()="book"]|descendant: : node()[name()="author"] 定位文档中任何父节点名为“book”的节点或任何从名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XPath 知识 小结