资料下载网
首页 计算机 考试教辅
XPath入门教程 pdf电子书免费下载,百度云
首页 > 计算机 > 数据库技术 > XPath入门教程 pdf电子书免费下载,百度云

《XPath入门教程》pdf电子书免费下载


下载方式一:

百度网盘下载地址:https://pan.baidu.com/s/1zYgwdC5ynDXVy_Rp0BQQaA
百度网盘密码:1111

下载方式二:

http://ziliaoshare.cn/Download/ae_123687_do_XPathRMJC.zip

 


XPath入门教程

作者:empty

出版社:empty

《XPath入门教程》介绍

XPath入门教程----宁家川整理

关于本教程中使用了例子

概述

在本教程中,您将通过编写拍卖站点应用程序的表示层来学习 XPath。您将在 XSLT 样式表内部指定 XPath 表达式,该样式表用于展示包含拍卖物品的 XML 文档。本教程使用的所有文件都在 zip 文件中,包括:

•XPath/AuctionItemList.xsd――定义拍卖物品数据格式的 XML Schema 文档。

•XPath/AuctionItemList.xml――包含一系列拍卖物品的 XML 文件;它是用于例子的数据。

•XPath/AuctionItemSummary-Base.xsl――一个 XSLT 样式表,用于定义当 Web 浏览器加载 AuctionItemList.xml 时,它将显示什么;它包含数据的表示规则。

•XPath/AuctionItemSummary-Section5.xsl――位置路径 中的解决方案。

•XPath/AuctionItemSummary-Section6.xsl――表达式 中的解决方案。

•XPath/AuctionItemSummary-Section7.xsl――函数库 中的解决方案。

AuctionItemList.xsd

AuctionItemList.xsd 包含针对拍卖物品和拍卖物品列表数据的业务规则,使用 XML Schema 语言进行描述:

拍卖物品列表只有一个根元素,称为 list,是 auctionItemList 类型元素的列表。

auctionItemList 由类型为 auctionItem 的一个或多个 item 元素组成。

auctionItem 由 5 个元素(bidIncrement、类型为 price 的 currentPrice、endOfAuction、description 和 sellerId)和一个类型为 itemAttributes 的属性组组成。

price 是一个正十进制值,具有两位小数,必须把类型为 customCurrency 的 currency 属性与它关联。

customCurrency 必须是 USD、GBP 或 EUR 之一。

itemAttributes 组必须包含一个字符串属性 type,一个字符串属性 id,以及一个布尔属性 private,默认情况下,其值是 false。

type 属性必须是下面值之一:Unknown、Traditional、BidOnly、FixedPrice 或 IndividualOffer。

如果想学习有关 XML Schema 的更多知识,请参阅 ,获取更多的 developerWorks 文章和教程。

AuctionItemList.xml

AuctionItemList.xml 与 AuctionItemList.xsd 中定义的 XML Schema 一致,包含了一系列的类型 auctionItemList。这个列表包含了 7 项。列表根元素的 xsi:schemaLocation 属性指出,该 XML 文档与 AuctionItemList.xsd schema 一致。

处理了数据格式之后,表示怎么办呢?您如何指定使用哪个 XSLT 样式表,在 Web 浏览器中显示该 XML 文档?这是在 XML 文档的第二行定义的:

?xml-stylesheet type= text/xsl href= /developerWorks/cn/education/xml/x-xpath/tutorial/AuctionItemSummary-Base.xsl ?>

这里,我声明应该使用 AuctionItemSummary-Base.xsl 样式表。数据本身已经选择了,这样,就可以展示 XPath 的使用,用于显示数据属性。当没有 XML 样式表文档链接到 AuctionItemList.xml 时,Web 浏览器只显示 XML 内容,并且看起来像下面这样:

AuctionItemList.xml

AuctionItemSummary-Base.xsl

AuctionItemSummary-Base.xsl 是一个 XSLT 样式表,它定义了 XSLT 处理器使用的一些规则,用于显示 AuctionItemList XML 文档。它使用 XPath 表达式来查找 XML 文档中的信息,并把它显示在 HTML 表中。我将把更多的细节放在 XPath 概述 中,XSLT 中 XPath 的使用。这里,我简要描述了 AuctionItemSummary-Base.xsl 的内容。它定义了处理 XML 文档时会激活的模板。激活哪个模板取决于,该 template 元素的 match 属性中记录的 XPath 表达式。例如,下面代码段就是 XPath 表达式,它们取自 AuctionItemSummary-Base.xsl:

• /

• list

• item

模板激活时显示的信息,是由它的 value-of 元素的 select 属性定义。这些属性的值也是 XPath 表达式。例如:

• description

• currentPrice

• @type

• @private

在每节(位置路径、表达式 和 函数库),您将修改 AuctionItemSummary-Base.xsl,以便用不同的方式显示信息。

至此,您应该在文本/XML 编辑器中看到文件。现在可以在使用的 Web 浏览器中打开 AuctionItemList.xml,查看 XSLT 处理器基于样式表生成的输出。您应该看到类似于下面的一些内容:

基本拍卖物品表

XPath概述

XML 路径语言(XPath)是一组语法和语义,用于引用 XML 文档的一些部分。XPath 的目的是让其他规范使用,比如 XSL Transformations (XSLT) 和 XML Pointer Language (XPointer)。要帮助您理解 XPath 是什么,我将通过展示一些与 AuctionItemList.xml 有关的例子开始。

XPath 表达式确定了 XML 文档中的一组节点。这组节点可以包含零或多个节点。例如,如果应用到 AuctionItemList.xml,XPath 表达式 /list 就确定了一个单独的节点――list 根元素。

The XPath 表达式 /list/item 确定了所有 item 元素。

XPath 使用正斜杠(/)符号,这与 Unix shell 相似。这就是 XPath 可以用在 Uniformed Resource Identifiers (URI) (比如URL)中的原因。这实际上是 XPath 名称的来源:像在 URL 中一样使用路径符号。

合法的 XPath 表达式可以包含谓词(predicate)。谓词包含布尔表达式,它们针对上下文节点集中的每个节点进行了测试。如果为真,将把节点保存在确定的节点集中;否则,就丢弃节点。在减少结果集中,谓词是有用的。例如,下面 XPath 表达式只确定第二项:

/list/item[currentPrice>1000.0]

XPath 表达式可以引用属性及 XML 文档中的元素。当引用属性时,使用 @ 字符。例如,下面的 XPath 表达式确定了 currentPrice 元素,其 currency 属性包含值 EUR:

/list/item/currentPrice[@currency= EUR ]

XPath 也提供函数,这可能是非常有用的。我将在 函数库 中,详细展示这些函数,但这里是一个体验。下面的 XPath 表达式确定了 item 的 description 元素,其 type 属性是“IndividualOffer”(并具有值 2MP digital camera):

/list/item[starts-with(@type, Ind )]/description

在使用的 XML 编译器中测试上面的 XPath 表达式:打开 AuctionItemList.xml,然后在 XPath 计算程序中输入表达式,看选定了哪些节点。

OK,现在已经向您介绍了 XPath!至今,您已经学习了 XPath 是一种语言,用于确定 XML 文档的部分。您已经看到 XPath 表达式看起来像什么,以及它如何引用 XML 文档内部的元素和属性。我也已经向您展示了,XPath 如何提供函数用于操纵数据。但这只是一个快速的概述;在其余的节中,我将更加详细讨论所有这些点――以及 XPath 的更多方面。例如,我将分析 XPath 名称空间和特殊字符(比如 // 和 *),并向您展示,并非所有 XPath 表达式具有上面例子中展示的形式(称为简化位置路径)。

XPath术语

什么是 XPath 节点?

XPath 把 XML 文档看作是一个节点树。节点可以有不同的类型,比如元素节点或者属性节点。一些类型的节点名称由 XML 名称空间 URI(允许空)和本地部分组成。比如,下图中 XPath 把 AuctionItemList.xml 表示成一棵节点树:

AuctionItemList.xml 的 XPath 视图

一种特殊的节点类型是根节点。一个 XML 文档只能有一个根节点,它是树的根,包含整个 XML 文档。注意,根节点包含根元素以及在根元素之前或之后出现的任何处理节点、声明节点或者注释节点。该例中,根节点的孩子有:

?xml version= 1.0 encoding= UTF-8 ?>

?xml-stylesheet type= text/xsl href= /developerWorks/cn/education/xml/x-xpath/tutorial/AuctionItemSummary-Base.xsl ?>

and

list ...>

item ...>

...

/item>

item ...>

...

/item>

...

/list>

XML 声明(如 ?xml version= 1.0 encoding= UTF-8 ?>)或文档类型定义(DTD)没有节点类型,因此在 XPath 中不能引用这类实体。

元素节点代表 XML 文档中的每个元素。属性节点附属于元素节点,表示 XML 文档中的属性。但是,以 xmlns: 开始的属性在 XPath 中使用名称空间节点表示。其他类型的节点包括文本节点、处理指令节点和注释节点。

离开了上下文?

XPath 相对于上下文计算表达式。上下文通常用 XPath 之外的其他技术如 XSLT 和 XPointer 指定。XPath 上下文包括上下文节点以及上下文的大小、位置和其他相关数据。从上下文的观点来看,其中最重要的是上下文节点。如果上下文节点是根节点,那么 list/item 指的就是 AuctionItemList.xml 中的 7 个 item 元素。如果上下文节点是另一个节点,比方说第一个 item 元素,那么 list/item 在该 XML 文档中什么也不指。

在 XSLT 中,select 属性的值是 XPath 表达式。比如在 AuctionItemSummary-Base.xsl 中,xsl:apply-templates 和 xsl:value-of 元素的 select 属性值(XPath 表达式)包括 list、item 或 itemId。在 XSLT 中,上下文节点是当前正在计算的节点。对于一个 XML 文档,XSLT 模板可能被激活多次并生成不同的结果。在 AuctionItemList.xml 中,第一个和第二个模板(match= / 和 match = list )被激活一次,而第三个模板(match= item )被激活七次(每个 item 元素激活一次)。第一次激活“item”模板时,上下文节点是 XML 文档中的第一个 item 元素( Miles Smiles album, CD ),比方说, xsl:value-of select= @id /> 的值就是 itemId0001。这个 XSLT 第二次被激活时,上下文节点就是第二个 item 元素( Coltrane Blue Train CD), xsl:value-of select= @id /> 的值是 itemId0002。注意,如果在 select 属性中使用 /list/item/@id 代替 @id,xsl-value-of 元素的值就会是空值。

位置路径

位置路径定义

位置路径是 XPath 中最有用也是应用最广泛的特性。位置路径是 XPath 表达式的特化(参见 表达式)。位置路径标识了和上下文有关的一组 XPath 节点。XPath 定义了两种语法:简化语法和非简化语法。

本教程中只讨论简化语法,因为这种语法应用最广,而且非简化语法也更复杂。如果希望了解非简化语法,请参阅 XPath 1.0 规范(参见 参考资料)。

位置路径有相对和绝对两种类型。

相对位置路径由使用 / 分隔的定位步序列组成。比如:

list/item[currentPrice 20.0]

这个位置路径由两个定位步组成:首先 list 选择和上下文节点有关的一组节点,然后 item[currentPrice 20.0] 在第一步所标识的子集中再选择一组节点;如果还有更多的节点也依此类推。

绝对位置路径由 / 和后面可选的相对位置路径组成,其中 / 表示根节点。绝对位置路径基本上就是在根节点上下文中计算的相对位置路径,比如:

/list/item[currentPrice 20.0]

对于绝对位置路径(以 / 开始的位置路径),上下文节点是没有意义的,因为路径总是从根节点开始计算。

实用语法

简化语法有一些非常实用的特点(多数可以在 XPath 概述 中看到)。现在列出最常用的一些特点,并给出相对于 AuctionItemList.xml 根节点的例子,即以 AuctionItemList.xml 的根节点作为上下文。

@ 用于引用属性。比如,位置路径 @currency 标识了 currency 属性。list/item[@private] 标识带有 private 属性的 item 元素,意即 AuctionItemList.xml 中的所有 item 元素。

* 用于引用上下文结点的所有子元素。@* 用于引用上下文结点的所有属性。

[] 也可用于引用有序序列中的特定元素。比如,list/item[2] 代表第二个 item 元素。实际上 [] 是一个谓词(参见 谓词)。

// 用于引用上下文节点的所有孩子。比如,//item 表示所有的 item 元素,而 //list/item 引用以 list 为父元素的所有 item 元素(在该例中即所有的 item 元素)。

. 用于引用上下文节点自身。比如,. 选择上下文节点,而 .//item 代表作为上下文节点孩子的所有 item 元素。

.. 用于引用上下文节点的父节点。比如,在第一个bidIncrement 元素的上下文中, ../item 就表示第一个 item 元素

谓词

谓词在位置路径中用于筛选当前节点集。谓词包含一个 boolean 表达式(或者很容易转化成 boolean 值的表达式)。用这个布尔表达式测试当前节点集的每个成员,如果表达式成立则保留该成员否则丢弃。谓词放在一对方括号([])中。比如下面的位置路径:

list/item/currentPrice[@currency= EUR ]

在计算过程中,AuctionItemList.xml 中所有的 currentPrice 元素都放在选择的节点集中。然后计算谓词 @currency= EUR ,货币中不包含值 EUR 的 currentPrice 元素被抛弃。

谓词也可以使用关系运算符 >、 、>=、 = 和 !=。如您在 表达式 中所看到的那样,它们也可以使用布尔运算符。

实验:位置路径

现在,我已经介绍了什么是位置路径,您的任务是修改 AuctionItemSummary-Base.xsl 已生成下面的结果,即表中只包含使用美元计价的物品:

包含用美元计价的拍卖物品的表

提示:需要用适当的位置路径代替 list 模板中 select 属性的值。在用双引号( )包围的字符串中应使用单引号(')。这一点将在 表达式 中进一步讨论。

一种解决方案是 AuctionItemSummary-Section5.xsl。修改 AuctionItemList.xml 中的第二行,指向 AuctionItemSummary-Section5.xsl,然后在 Web 浏览器中打开 AuctionItemList.xml。

位置路径是更一般的 XPath 表达式的一个子集。表达式不仅可以引用一组节点(位置路径),还可以返回布尔值、数字或者字符串。

表达式

布尔表达式

布尔表达式的值只能是:真或者假。

XPath 定义了 and 和 or 运算符。对于 and,首先计算左侧的操作数:如果不成立则返回 false;否则计算右侧的操作数并决定表达式的结果。对于 or,如果左操作数计算结果为真则表达时返回 true;否则计算右操作数并决定表达式的值。比如,布尔表达式 type= BidOnly 在 AuctionItemList.xml 中第二个 item 元素的上下文中计算结果为 true。

XPath 定义了以下运算符:

•= 表示“等于”

•!= 表示“不等于”

• 表示“小于”

• = 表示“小于等于”

•> 表示“大于”

•>= 表示“大于等于”

比如,在 AuctionItemList.xml 中第一个 item 元素的上下文中,布尔表达式 bidIncrement != 10 返回 true,而在第二个 item 元素的上下文中返回 false。

= 运算符用于节点时,测试两个节点的值是否相等,而不论是否是同一个节点。该运算符可用于比较属性值。比如,item[@type = @private] 选择 type 属性值和 private 属性值相同的物品。

XML 文档中包含 XPath 表达式时,必须遵循 XML 1.0 的结构良好性规则,任何 或 = 字符必须分别用 < 和 <= 表示。比如,XPath 表达式 bidIncrement 5 在 XPointer 中是合法的,但是在 XSLT 文档中必须写成 bidIncrement < 5。

如果布尔表达式的操作数类型不同(节点集、数字、字符串),需要进行转换,详情参见 XPath 1.0 规范。

数字

XPath 数字是 64 位双精度浮点数。XPath 数字包括“非数字” NaN 值、正无穷和负无穷、正零和负零。

XPath 提供的数值运算符有:+(加)、-(减)、*(乘)、div(除)和 mod(整除求余)。

如果需要数值运算法会把操作数转换成数字,就像使用 number 函数一样(参见 函数库)。

提示:减法(-)运算符的前面必须有空格,因为 XML 允许字符串中包含“-”字符。

下面是 XPath 数字表达式的一些例子:

•7 + 3 返回 10

•7 - 3 返回 4

•7 * 3 返回 21

•7 div 3 返回 2.3333333333333335

•7 mod 3 返回 1

提示: 星号(*)可以被解释成通配符或者乘法字符。XPath 定义了词法规则以消除这种歧义(详请参阅 XPath 1.0 规范)。但是,除法字符引入了新的运算符 div,因为,反斜杠(/)用于分隔定位步。

字符串

XPath 字符串是有效的 XML 1.0(Unicode)字符序列,如 Miles Smiles album, CD。

XPath 中的字符串使用引号(' 或 )包围起来。如果 XML 文档中的 XPath 字符串包含引号,可以选择:

•分别使用 ' 或 " 引起来。比如,description = 'New 256m "USB" MP3 player'。

•如果表达式用双引号( )包围起来,则在表达式中使用单引号('),反之亦然。比如,'New 356m USB MP3 player'。

XPath 提供了非常有用的字符串处理函数,参见 函数库。

实验:表达式

现在我们介绍了 XPath 表达式,您的任务是修改 AuctionItemSummary-Base.xsl 来得到下面的结果――表中包含这一小时中拍卖完成的所有物品:

一小时中拍卖完成的物品

提示: endOfAuction 是到拍卖结束时还剩下的时间,精确到分钟。需要像 位置路径 中那样改变同一个 select 属性。

一种解决方案是 AuctionItemSummary-Section6.xsl。修改 AuctionItemList.xml 中的第二行,指向 AuctionItemSummary-Section6.xsl,然后在 Web 浏览器中打开 AuctionItemList.xml。

函数库

函数库

XPath 定义了一组函数,称为核心函数库。每个函数从三个方面来定义:

•函数名

•返回类型(必须的,不能使用 void)

•参数类型(可以没有参数或者带有多个参数,参数可以是必需的也可以是可选的)

您可能会发现在谓词和表达式中经常会使用函数。其他规范如 XSLT 扩展了这个函数集。函数被分成四类,以下分别介绍:

•节点集函数

•字符串函数

•布尔函数

•数字函数

节点集函数

节点集函数提供关于一组节点(一个或多个节点)的信息。常用的节点集函数有:

•last()――返回一个称为上下文大小的数字,即给定上下文中的节点数,不同于最后一个节点。

•position()――返回一个称为上下文位置的数字,集当前节点在给上下文节点集(列表)中的位置。比如,可以用表达式 position()=last() 测试处理的是否是集合中的最后一个节点。

•count(node-set)――返回实参节点集中的节点数。比如,在 AuctionItemList.xml 文档的上下文中,count(//item) 返回 item 元素的个数,即 7。

•id(object)――返回一个节点集,根据在 DTD 中声明为 ID 类型的唯一标识符选择元素。因为在 AuctionItemList.xml 中没有使用 DTD,这个例子中得到的节点集总是空集。Id( ItemId0001 ) 返回一个空节点集。

XPath 还定义了和节点名及名称空间有关的其他三个函数:

•local-name()

•namespace-uri()

•name()

详情参见 XPath 1.0 规范的 4.1 节。

字符串函数

通过字符串函数您可以操纵字符串。常用的字符串函数有:

•string()――把参数对象或者上下文结点转化成字符串。合法的参数包括节点集、数字、布尔值或者其他任何类型――但是对于最后一种情况转换的结果不可预料。建议使用 XSLT 函数 format-number 把数字转化成字符串,或者使用 XSLT 元素 xsl:number 提供给用户。

•concat()――以两个或更多字符串作为参数并返回这些字符串的连接。比如,concat( Original , recording , Blue Train LP record ) 返回 Original recording Blue Train LP record 。

•starts-with()――如果第一个字符串参数以第二个字符串参数开始则返回 true,否则返回 false。比如,starts-with( Miles Smiles album, CD , Miles ) 返回 true。

•contains()――如果第一个字符串参数包含第二个字符串参数则返回 true,否则返回 false。比如,contains( Miles Smiles album, CD , album ) 返回 true。

其他的 XPath 字符串函数包括:substring()、substring-before()、substring-after()、string-length()、normalize-space() 和 translate()。详请参阅 XPath 1.0 规范的 4.2 节。

布尔函数

布尔函数用于把一个对象或字符串转化成 true 或者 false,或者直接获得真或假的值。布尔函数有:

•boolean()――根据以下规则返回作为参数传递的对象转换成布尔值的结果:不同于 0 或者 NaN 的数字为 true;非空的节点集或者字符串为 true。其他类型的对象已不可预料的方式转换。

•not()――如果作为参数传递的布尔值为 false 返回 true,否则返回 false。

•true() 和 false()――分别返回 true 或 false。这些函数很有用,因为在 XPath 中 true 和 false 被看作是普通的字符串而不是真和假的值。

•lang()――如果上下文节点的语言和字符串参数中指定的语言相同,或者是它的一种子语言返回 true,否则返回 false。上下文节点的语言通过 xml:lang 属性的值定义。比如,lang( en ) 对于 AuctionItemList.xml 树中的任何节点都返回 false,因为没有指定 xml:lang 属性。

数字函数

数字函数是 XPath 的数值函数,都返回数字。其中包括:

•number()――把可选的对象参数(如果没有指定参数则使用上下文节点)转化成数字,转换的规则如下:

o布尔值 true 转换成1,false 转换成 0。

o字符串转换成合理的数字。

o节点集首先转换成字符串,然后把这个字符串转换成数字。

其他类型对象以不可预料的方式转换。比如,number( 250 ) 返回 250,而 number( miles1965 ) 返回 NaN。

•sum()――对节点集参数中的所有节点应用 number() 函数后返回它们的和。

•floor()――返回不大于数字参数的最大整数数字。比如,floor(2.75) 返回 2。

•ceiling()――返回不小于数字参数的最小整数数字。比如,ceiling(2.75) 返回 3。

•round()――返回和数字参数最接近的整数数字。比如,round(2.75) 返回 3。

实验:函数库

现在已经介绍了函数库,您的任务是修改 AuctionItemSummary-Base.xsl 以生成下面的结果――只包含新的拍卖物品的表:

只包含新的拍卖物品

提示:这类拍卖物品应该在描述中包含字符串 New 或 NEW。同样需要像 位置路径 和 表达式 中那样修改 select 属性。

一种解决方案是 AuctionItemSummary-Section7.xsl。修改 AuctionItemList.xml 中的第二行,指向 AuctionItemSummary-Section7.xsl,然后在 Web 浏览器中打开 AuctionItemList.xml。


《XPath入门教程》目录

计算机


python
AI人工智能
javascript
计算机网络/服务器
数据库技术
计算机F

考试教辅


考研考博
英语四六级

沪ICP备18046276号-5