版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XPath入门教程目录关于本教程中使用了例子2概述2AuctionItemList.xsd2AuctionItemList.xml3AuctionItemSummary-Base.xsl4XPath概述6XPath术语7什么是XPath节点?7离开了上下文?9位置路径10位置路径定义10实用语法10实验:位置路径11表达式12布尔表达式12数字13字符串14实验:表达式14函数库15函数库15节点集函数15字符串函数16布尔函数16数字函数16XPath入门教程宁家川整理关于本教程中使用了例子概述在本教程中,您将通过编写拍卖站点应用程序的表示层来学习XPath。您将在XSLT样式表内部指定XPath表达式,该样式表用于展示包含拍卖物品的XML文档。本教程使用的所有文件都在zip文件中,包括:XPath/AuctionItemList.xsd――定义拍卖物品数据格式的XMLSchema文档。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.xsdAuctionItemList.xsd包含针对拍卖物品和拍卖物品列表数据的业务规那么,使用XMLSchema语言进行描述:拍卖物品列表只有一个根元素,称为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。如果想学习有关XMLSchema的更多知识,请参阅,获取更多的developerWorks文章和教程。AuctionItemList.xmlAuctionItemList.xml与AuctionItemList.xsd中定义的XMLSchema一致,包含了一系列的类型auctionItemList。这个列表包含了7项。列表根元素的xsi:schemaLocation属性指出,该XML文档与AuctionItemList.xsdschema一致。处理了数据格式之后,表示怎么办呢?您如何指定使用哪个XSLT样式表,在Web浏览器中显示该XML文档?这是在XML文档的第二行定义的:<?xml-stylesheettype="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.xslAuctionItemSummary-Base.xsl是一个XSLT样式表,它定义了XSLT处理器使用的一些规那么,用于显示AuctionItemListXML文档。它使用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的目的是让其他标准使用,比方XSLTransformations(XSLT)和XMLPointerLanguage(XPointer)。要帮助您理解XPath是什么,我将通过展示一些与AuctionItemList.xml有关的例子开始。XPath表达式确定了XML文档中的一组节点。这组节点可以包含零或多个节点。例如,如果应用到AuctionItemList.xml,XPath表达式/list就确定了一个单独的节点――list根元素。TheXPath表达式/list/item确定了所有item元素。XPath使用正斜杠〔/〕符号,这与Unixshell相似。这就是XPath可以用在UniformedResourceIdentifiers(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〞〔并具有值2MPdigitalcamera〕:/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文档。注意,根节点包含根元素以及在根元素之前或之后出现的任何处理节点、声明节点或者注释节点。该例中,根节点的孩子有:<?xmlversion="1.0"encoding="UTF-8"?><?xml-stylesheettype="text/xsl"href="/developerWorks/cn/education/xml/x-xpath/tutorial/AuctionItemSummary-Base.xsl"?>and<list...><item...>...</item><item...>...</item>...</list>XML声明〔如<?xmlversion="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元素〔"MilesSmilesalbum,CD"〕,比方说,<xsl:value-ofselect="@id"/>的值就是itemId0001。这个XSLT第二次被激活时,上下文节点就是第二个item元素〔"ColtraneBlueTrain"CD〕,<xsl:value-ofselect="@id"/>的值是itemId0002。注意,如果在select属性中使用/list/item/@id代替@id,xsl-value-of元素的值就会是空值。位置路径位置路径定义位置路径是XPath中最有用也是应用最广泛的特性。位置路径是XPath表达式的特化〔参见表达式〕。位置路径标识了和上下文有关的一组XPath节点。XPath定义了两种语法:简化语法和非简化语法。本教程中只讨论简化语法,因为这种语法应用最广,而且非简化语法也更复杂。如果希望了解非简化语法,请参阅XPath1.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表达式时,必须遵循XML1.0的结构良好性规那么,任何<或<=字符必须分别用<和<=表示。比方,XPath表达式bidIncrement<5在XPointer中是合法的,但是在XSLT文档中必须写成bidIncrement<5。如果布尔表达式的操作数类型不同〔节点集、数字、字符串〕,需要进行转换,详情参见XPath1.0标准。数字XPath数字是64位双精度浮点数。XPath数字包括“非数字〞NaN值、正无穷和负无穷、正零和负零。XPath提供的数值运算符有:+〔加〕、-〔减〕、*〔乘〕、div〔除〕和mod〔整除求余〕。如果需要数值运算法会把操作数转换成数字,就像使用number函数一样〔参见函数库〕。提示:减法〔-〕运算符的前面必须有空格,因为XML允许字符串中包含“-〞字符。下面是XPath数字表达式的一些例子:7+3返回107-3返回47*3返回217div3返回2.33333333333333357mod3返回1提示:星号〔*〕可以被解释成通配符或者乘法字符。XPath定义了词法规那么以消除这种歧义〔详请参阅XPath1.0标准〕。但是,除法字符引入了新的运算符div,因为,反斜杠〔/〕用于分隔定位步。字符串XPath字符串是有效的XML1.0〔Unicode〕字符序列,如MilesSmilesalbum,CD。XPath中的字符串使用引号〔'或"〕包围起来。如果XML文档中的XPath字符串包含引号,可以选择:分别使用'或"引起来。比方,description='New256m"USB"MP3player'。如果表达式用双引号〔"〕包围起来,那么在表达式中使用单引号〔'〕,反之亦然。比方,'New356m"USB"MP3player'。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()详情参见XPath1.0标准的4.1节。字符串函数通过字符串函数您可以操纵字符串。常用的字符串函数有:string()――把参数对象或者上下文结点转化成字符串。合法的参数包括节点集、数字、布尔值或者其他任何类型――但是对于最后一种情况转换的结果不可预料。建议使用XSLT函数format-number把数字转化成字符串,或者使用XSLT元素xsl:number提供应用户。concat()――以两个或更多字符串作为参数并返回这些字符串的连接。比方,concat("Original","recording","BlueTrainLPrecord")返回"OriginalrecordingBlueTrainLPrecord"。starts-with()――如果第一个字符串参数以第二个字符串参数开始那么返回true,否那么返回false。比方,starts-with("MilesSmilesalbum,CD","Miles")返回true。contains()――如果第一个字符串参数包含第二个字符串参数那么返回true,否那么返回false。比方,contains("MilesSmilesalbum,CD","album")返回true。其他的XPath字符串函数包括:substring()、substring-before()、substring-after()、string-length()、normalize-space()和translate()。详请参阅XPath1.0标准的4.2节。布尔函数布尔
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论