q?/span>XPathQ?/span>XSLTQ?/span>XLink?/span>XPointer
XSLT?span lang="EN-US">XLink ?span lang="EN-US"> XPointer 都是 W3C 标准?span lang="EN-US">XSLT ?span lang="EN-US"> XPathQ以?span lang="EN-US"> XSL Formatting Object (XSL-FO) 构成?span lang="EN-US"> W3C eXtensible Stylesheet Language (XSL) pd规范?span lang="EN-US">
XSLT?span lang="EN-US">XLink ?span lang="EN-US"> XPointer 都是 W3C 标准?span lang="EN-US">XSLT ?span lang="EN-US"> XPathQ以?span lang="EN-US"> XSL Formatting Object (XSL-FO) 构成?span lang="EN-US"> W3C eXtensible Stylesheet Language (XSL) pd规范?span lang="EN-US">
表示Q?/span>XSLT q泛使用 XPath q行匚w―?/span>也就是,试节点是否匚w指定模式?span lang="EN-US">XSLT 指定?span lang="EN-US"> XPath 使用的上下文。如果想使用 XSLTQ就应该?jin)?span lang="EN-US"> XPath。在 关于本教E中使用的例?中,(zhn)看C(jin) AuctionItemSummary-Base.xsl 样式表包含了(jin) XPath 表达式?span lang="EN-US">XSLT 使用q些 XPath 表达式,在源文中查扑配条件的元素Q也使用它们来显C结果文中的信息?span lang="EN-US">XSLT 使用 XPath 函数来执行算术和字符串操U|作?span lang="EN-US">
链接Q?/span>XLink ?span lang="EN-US"> XML 中提供了(jin) HTML 链接概늚一般化?span lang="EN-US">XLink 插入 XML 文的元素提供了(jin)某种语法Q以便把资源链接在一P?qing)描q它们的关系。这些链接可以是单向的,比如 HTML 的超链接Q或者更加复杂的?span lang="EN-US">XLink 使用 XPointer 来查找资源?span lang="EN-US">
指向Q?/span>XPointer ?span lang="EN-US"> XPath 的扩展,提供?jin)?span lang="EN-US"> XML 文?qing)其内部的寻址?span lang="EN-US">XPointer 一般化?span lang="EN-US"> XPath 节点的概念,使用?span lang="EN-US"> XPointer 位置、点和范围的概念?span lang="EN-US">XPointer 也指定了(jin)?span lang="EN-US"> XPath 计算q程中用的上下文,q提供了(jin)?span lang="EN-US"> XPath 中不可用的其他函数?/p>
一句话结:
XMLQ其他技术的基础Q数据)(j)?span lang="EN-US">
XML SchemaQ数据格式规则?span lang="EN-US">
XSLTQ数据表C?span lang="EN-US">/匚w?span lang="EN-US">
XLinkQ链接?span lang="EN-US">
XPointer and XPathQ寻址?/h3>
XML语法
一.位置路径
1.路径
位置路径?span lang="EN-US"> XPath 中最有用也是应用最q泛的特性。位|\径是 XPath 表达式的特化Q参?表达式)(j)。位|\径标识了(jin)和上下文有关的一l?span lang="EN-US"> XPath 节点?span lang="EN-US">XPath 定义?jin)两U语法:(x)化语法和非简化语法?span lang="EN-US">
位置路径有相对和l对两种cd?span lang="EN-US">
相对位置路径׃?span lang="EN-US"> / 分隔的定位步序列l成。比如:(x)
list/item[currentPrice<20.0]
l对位置路径?span lang="EN-US"> / 和后面可选的相对位置路径l成Q其?span lang="EN-US"> / 表示根节炏V?span lang="EN-US">
/list/item[currentPrice<20.0]
XPath 表达?span lang="EN-US"> /list q定了(jin)一个单独的节点――list 根元素?span lang="EN-US">
The XPath 表达?span lang="EN-US"> /list/item 定?jin)所?span lang="EN-US"> item 元素?span lang="EN-US">
XPath 表达式可以引用属性及(qing) XML 文中的元素。当引用属性时Q?span lang="EN-US"> @ 字符。例如,下面?span lang="EN-US"> XPath 表达式确定了(jin) currentPrice 元素Q其 currency 属性包含?span lang="EN-US"> EURQ?span lang="EN-US">
/list/item/currentPrice[@currency="EUR"]
@ 用于引用属性。比如,位置路径 @currency 标识?span lang="EN-US"> currency 属性?span lang="EN-US">list/item[@private] 标识带有 private 属性的 item 元素Q意?span lang="EN-US"> AuctionItemList.xml 中的所?span lang="EN-US"> item 元素?span lang="EN-US">
* 用于引用上下文结点的所有子元素?span lang="EN-US">@* 用于引用上下文结点的所有属性?span lang="EN-US">
[] 也可用于引用有序序列中的特定元素。比如,list/item[2] 代表W二?span lang="EN-US"> item 元素。实际上 [] 是一个谓词(参见谓词Q?span lang="EN-US">
// 用于引用上下文节点的所有孩子。比如,//item 表示所有的 item 元素Q?span lang="EN-US"> //list/item 引用?span lang="EN-US"> list 为父元素的所?span lang="EN-US"> item 元素Q在该例中即所有的 item 元素Q?span lang="EN-US">
. 用于引用上下文节点自w。比如,. 选择上下文节点,?span lang="EN-US"> .//item 代表作ؓ(f)上下文节点孩子的所?span lang="EN-US"> item 元素?span lang="EN-US">
.. 用于引用上下文节点的父节炏V比如,在第一?span lang="EN-US">bidIncrement 元素的上下文中, ../item pC第一?span lang="EN-US"> item 元素?span lang="EN-US">
2.谓词
谓词在位|\径中用于{选当前节炚w。谓词包含一?span lang="EN-US"> boolean 表达式(或者很Ҏ(gu)转化?span lang="EN-US"> boolean 值的表达式)(j)。用q个布尔表达式测试当前节炚w的每个成员,如果表达式成立则保留该成员否则丢弃。谓词放在方括号[]中。比如下面的位置路径Q?span lang="EN-US">
list/item/currentPrice[@currency="EUR"]
在计过E中Q?span lang="EN-US">AuctionItemList.xml 中所有的 currentPrice 元素都放在选择的节炚w中。然后计谓?span lang="EN-US"> @currency="EUR"Q货币中不包含?span lang="EN-US"> EUR ?span lang="EN-US"> currentPrice 元素被抛弃?span lang="EN-US">
谓词也可以用关p运符 >?span lang="EN-US"><?span lang="EN-US">>=?span lang="EN-US"><= ?span lang="EN-US"> !=?span lang="EN-US">
?span lang="EN-US">.表达?/span>
1.布尔表达?span lang="EN-US">
XML 文中包?span lang="EN-US"> XPath 表达式时Q必遵?span lang="EN-US"> XML 1.0 的结构良好性规则,M < ?span lang="EN-US"> <= 字符必须分别?span lang="EN-US"> < ?span lang="EN-US"> <= 表示。比如,XPath 表达?span lang="EN-US"> bidIncrement < 5 ?span lang="EN-US"> XPointer 中是合法的,但是?span lang="EN-US"> XSLT 文档中必d?span lang="EN-US"> bidIncrement < 5?span lang="EN-US">
2.数字
XPath 数字?span lang="EN-US"> 64 位双_ֺ点数?span lang="EN-US">XPath 数字包括“非数?span lang="EN-US">” NaN 倹{正无穷和负无穷、正零和负零?span lang="EN-US">
XPath 提供的数D符有:(x)+Q加Q?span lang="EN-US">-Q减Q?span lang="EN-US">*Q乘Q?span lang="EN-US">divQ除Q和 modQ整除求余)(j)?span lang="EN-US">
提示Q减法(-Q运符的前面必LI格Q因?span lang="EN-US"> XML 允许字符串中包含“-”字符?span lang="EN-US">
下面?span lang="EN-US"> XPath 数字表达式的一些例子:(x)
7 + 3 q回 10
7 - 3 q回 4
7 * 3 q回 21
7 div 3 q回 2.3333333333333335
7 mod 3 q回 1
3.字符?span lang="EN-US">
XPath 中的字符串用引P' ?span lang="EN-US"> "Q包围v来。如?span lang="EN-US"> XML 文中的 XPath 字符串包含引P可以选择Q?span lang="EN-US">
分别使用 ' ?span lang="EN-US"> " 引v来。比如,description = 'New 256m "USB" MP3 player'
?span lang="EN-US">.函数?/span>
XPath 定义?jin)一l函敎ͼUCؓ(f)核心(j)函数库。每个函C三个斚w来定义:(x)
(1)函数?span lang="EN-US">
(2)q回cdQ必ȝQ不能?span lang="EN-US"> voidQ?span lang="EN-US">
(3)参数cdQ可以没有参数或者带有多个参敎ͼ参数可以是必需的也可以是可选的Q?span lang="EN-US">
函数被分成四c,以下分别介绍Q?span lang="EN-US">
1.节点集函?span lang="EN-US">
节点集函数提供关于一l节点(一个或多个节点Q的信息。常用的节点集函数有Q?span lang="EN-US">
last()―?/span>q回一个称Z下文大小的数字,即给定上下文中的节点敎ͼ不同于最后一个节炏V?span lang="EN-US">
position()―?/span>q回一个称Z下文位置的数字,集当前节点在l上下文节点集(列表Q中的位|。比如,可以用表辑ּ position()=last() 试处理的是否是集合中的最后一个节炏V?span lang="EN-US">
count(node-set)―?/span>q回实参节点集中的节Ҏ(gu)。比如,?span lang="EN-US"> AuctionItemList.xml 文档的上下文中,count(//item) q回 item 元素的个敎ͼ?span lang="EN-US"> 7?span lang="EN-US">
id(object)―?/span>q回一个节炚wQ根据在 DTD 中声明ؓ(f) ID cd的唯一标识W选择元素。因为在 AuctionItemList.xml 中没有?DTDQ这个例子中得到的节炚wLI集?span lang="EN-US">Id("ItemId0001") q回一个空节点集?span lang="EN-US">
XPath q定义了(jin)和节点名?qing)名U空间有关的其他三个函数Q?span lang="EN-US">
local-name()
namespace-uri()
name()
2.字符串函?span lang="EN-US">
通过字符串函数?zhn)可以操纵字符丌Ӏ常用的字符串函数有Q?span lang="EN-US">
string()―?/span>把参数对象或者上下文l点转化成字W串。合法的参数包括节点集、数字、布?yu)(dng)值或者其他Q何类?span lang="EN-US">―?/span>但是对于最后一U情况{换的l果不可预料。徏议?span lang="EN-US"> XSLT 函数 format-number 把数字{化成字符Ԍ或者?span lang="EN-US"> XSLT 元素 xsl:number 提供l用戗?span lang="EN-US">
concat()―?/span>以两个或更多字符串作为参数ƈq回q些字符串的q接。比如,concat("Original ","recording ","Blue Train LP record") q回 "Original recording Blue Train LP record"?span lang="EN-US">
starts-with()―?/span>如果W一个字W串参数以第二个字符串参数开始则q回 trueQ否则返?span lang="EN-US"> false。比如,starts-with("Miles Smiles album, CD", "Miles") q回 true?span lang="EN-US">
contains()―?/span>如果W一个字W串参数包含W二个字W串参数则返?span lang="EN-US"> trueQ否则返?span lang="EN-US"> false。比如,contains("Miles Smiles album, CD", "album") q回 true?span lang="EN-US">
其他?span lang="EN-US"> XPath 字符串函数包括:(x)substring()?span lang="EN-US">substring-before()?span lang="EN-US">substring-after()?span lang="EN-US">string-length()?span lang="EN-US">normalize-space() ?span lang="EN-US"> translate()?span lang="EN-US">
3.布尔函数
布尔函数用于把一个对象或字符串{化成 true 或?span lang="EN-US"> falseQ或者直接获得真或假的倹{布?yu)(dng)函数有Q?span lang="EN-US">
boolean()―?/span>Ҏ(gu)以下规则q回作ؓ(f)参数传递的对象转换成布?yu)(dng)值的l果Q不同于 0 或?span lang="EN-US"> NaN 的数字ؓ(f) trueQ非I的节点集或者字W串?span lang="EN-US"> true。其他类型的对象已不可预料的方式转换?span lang="EN-US">
not()―?/span>如果作ؓ(f)参数传递的布尔gؓ(f) false q回 trueQ否则返?span lang="EN-US"> false?span lang="EN-US">
true() ?span lang="EN-US"> false()―?/span>分别q回 true ?span lang="EN-US"> false。这些函数很有用Q因为在 XPath ?span lang="EN-US"> true ?span lang="EN-US"> false 被看作是普通的字符串而不是真和假的倹{?span lang="EN-US">
lang()―?/span>如果上下文节点的语言和字W串参数中指定的语言相同Q或者是它的一U子语言q回 trueQ否则返?span lang="EN-US"> false?span lang="EN-US">
4.数字函数
数字函数?span lang="EN-US"> XPath 的数值函敎ͼ都返回数字。其中包括:(x)
number()―?/span>把可选的对象参数Q如果没有指定参数则使用上下文节点)(j)转化成数字,转换的规则如下:(x)
布尔?span lang="EN-US"> true 转换?span lang="EN-US">1Q?span lang="EN-US">false 转换?span lang="EN-US"> 0?span lang="EN-US">
字符串{换成合理的数字?span lang="EN-US">
节点集首先{换成字符Ԍ然后把这个字W串转换成数字?span lang="EN-US">
其他cd对象以不可预料的方式转换。比如,number("250") q回 250Q?span lang="EN-US"> number("miles1965") q回 NaN?span lang="EN-US">
sum()―?/span>对节炚w参数中的所有节点应?span lang="EN-US"> number() 函数后返回它们的和?span lang="EN-US">
floor()―?/span>q回不大于数字参数的最大整数数字。比如,floor(2.75) q回 2?span lang="EN-US">
ceiling()―?/span>q回不小于数字参数的最整数数字。比如,ceiling(2.75) q回 3?span lang="EN-US">
round()―?/span>q回和数字参数最接近的整数数字。比如,round(2.75) q回 3?

]]>