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