大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 网页设计 -> HTML/CSS -> 跟我学XSL(二)

跟我学XSL(二)

时间: 2021-07-31 作者:daque

表一、演算符与特出字符

 演算符

刻画

/

采用子元素,归来左侧元素的径直子元素;即使"/"坐落最左侧表白采用根结点的径直子元素

//

递归低沉,不管深度,探求指定的元素;即使坐落最左侧表白从根结点动身递归低沉探求指定元素

.

表白暂时元素

*

通配符,采用大肆元素,不商量名字

@

博得属性值,动作属性名的前缀

@*

通配符,采用大肆属性,不商量名字

:

名字效率范畴分割符,将名字效率范畴前缀与元素或属性名分割飞来

!*

在关系节点上运用指定本领

()*

分批,精确指定优先程序

[]

运用过滤款式

[]*

下标演算符,用来在汇合中引导元素

  表二、论理演算符

 可选办法

刻画

and $and$ 或 &&

论理与

or $or$ 或 ||

论理或

not() $not$

论理非

  表三、联系演算符

 可选办法

刻画

= 或 $eq$

十分

= 或 $ieq$

十分(不辨别巨细写)

!= 或 $ne$

不等

$ine$

不等(不辨别巨细写)

< 或 $lt$

小于

$ilt$

小于(不辨别巨细写)

<= 或 $le$

小于即是

$ile$

小于即是(不辨别巨细写)

> 或 $gt$

大于

$igt$

大于(不辨别巨细写)

>= 或 $ge$

大于即是

$ige$

大于即是(不辨别巨细写)

$all$

汇合演算符,即使汇合中一切名目均满意前提则归来"真"

$any$

汇合演算符,即使汇合中大肆名目满意前提则归来"真"

|

汇合演算符,归来两个汇合的共同

  示例一:

  从部分简历中探求具备具备"web开拓"本领的人的全名与e-mail。假如文书档案构造如次所示:

<document><resume><name>name</name><sex>sex</sex><birthday>birthday</birthday><skill>skill1</skill><skill>skill2</skill2>…<skill>skilln</skill></resume><resume>…</resume>…</document>

  为从之上构造的部分简历中探求出一切具备web开拓"本领的人的全名与e-mail的xsl文书档案构造如次:

<table border="1" cellspacing="0"><th>全名</th><th>e-mail</th><xsl:for-each select="resume [$any$skill="web开拓"]"><tr><td><xsl:value-of select="name"/></td><td><xsl:value-of select="e-mail"/></td></tr></xsl:for-each></table>

  证明:

  1.[ ] ── 表白采用前提,惟有满意前提的部分简历才被表露。

  2.$any$ ── 因为每部分有多种本领,故加$any$动作前缀,以使每部分一切本领都能被比拟。

  3.skill='web开拓' ── 挑选前提。

  示例二、

  仍上头的xml文书档案为例,即使欲采用1977/1/1之前出身的人的全名、本领与e-mail,相映的xsl文书档案构造如次(假设华诞方法为yyyy/mm/dd):

<table border="1" cellspacing="0"><th>全名</th><th>本领</th><th>e-mail</th><xsl:for-each select="resume[birthday$lt$"1977/1/1"]"><tr><td><xsl:value-of select="name"/></td><td><xsl:value-of select="skill[0]"/><xsl:for-each select="skill[index()>0]">、<xsl:value-of select="."/></xsl:for-each></td><td><xsl:value-of select="e-mail"/></td></tr></xsl:for-each></table>

  证明:

  1.birthday $lt$ '1977/1/1' ── 探求前提,在此处运用"< "会缺点,故运用"$lt$"表白小于。

  2.skill [0] ── 表白采用skill的第一项。

  3.skill [index()>0] ── 表白采用skill的第二项此后(囊括第二项)的名目。

  4.xsl:value-of select="." ── 表白采用暂时标志的值。

  断定大师该当提防到,在前方以及此次的例子中展示了少许因变量,如index()、formatindex()、childnumber(),大概大师还不实足领会个中的含意吧?敬请关心下一课。[page]

本期进修xsl款式本领,即可用来xsl元素<xsl:for-each>、<xsl:value-of>、<xsl:template>的select属性、<xsl:apply-templates>的match属性、<xsl:if>、<xsl:when>的test属性中,对元素的范畴举行挑选,进而供给更大的精巧性。

  xml与dhtml(动静html)一律,那些节点都是一个个东西,并且那些东西都是有档次的,从根节点发端形成一颗档次清淅的树状构造,这就产生了文书档案东西模子dom(document object model),经过东西的属性、本领来到达考察遏制xml节点的手段。

  咱们这边不安排就xml的dom逐个精细阐明,由于这实足不妨写成一个篇幅较多的教程,咱们先就少许罕见的本领作少许计划,以期对dom的东西本领有一个大概的领会。

  注:从本期发端,一切示例不复供给完备源代码,如有不领会之处,请提防观赏前方七期、并发端练手。

  一、end()

  含意:归来汇合中结果一个元素。

  示例:输入结果一份简历

  假设xml文献方法为:

……<resume>…</resume>……<resume>…</resume>……

  相映xsl文献实质为:

<xsl:for-each select="resume[end()]">……</xsl:for-each>

  或:

<xsl:templates match="resume[end()]">……</xsl:templates>

  或:

<xsl:apply-template select="resume[end()]">……</xsl:apply-template>

  二、index()

  含意:归来该元素在汇合中的场所,归来值是一平头,个中第一个元素归来0。

  示例:归来前方三份简历。

resume[index()$le$3]

  提防:index()是与父元素关系的,请看下例:

<x><y/><y/></x><x><y/><y/></x>

  归来一切<x>中的第一个<y>

x/y[index()=0] 或x/y[0]

  三、nodename()

  含意:归来元素的名字,即标志名。

  示例:采用大肆元素,假设其名字(即标志名)即是"name":

*[nodename()='name'] 或 *[name]

  四、number()

  含意:将值变换为数值情势,即使不是数值则归来空,诉求参数。

  示例:年纪(age)小于30岁的人的简历(resume):

resume[number(age)$lt$30] 或 resume[age$lt$30]

  五、nodetype()

  含意:归来结点典型,截止为是数值。以次是归来值列表:

 结点典型

 结点典型值

 结点的字符情势刻画

 element

 1

 'element'

 element attribute

 2

 'attribute'

 markup-delimited region of text

 3

 'text'

 processing instruction

 7

 'processing_instruction'

 comment

 8

 'comment'

 document entity

 9

 'document'

  六、value()

  含意:归来元素或属性的值。

  示例:value()是元素或属性的缺省本领,以次表白是等价:

name!value()="name" 与 name="name"@attr="attribute_value" 与 @attr="attribute_value"

  注:@是属性前缀,@attr表白是属性attr

  七、attribute()

  含意:归来一切属性结点的汇合,等价于"@*"。

  示例:探求一切的resume元素,满意前提至罕见一个属性的值为"abc":

resume[$any$attribute()='abc'] 或 resume[$any$@*='abc']

  探求一切的resume元素,满意前提至罕见一个子元素有一个属性的值为"abc":

resume[$any$*/attribute()='abc'] 或 resume[$any$*/@*='abc']

  八、comment()

  含意:归来一切解释结点。

  示例:

resume[$any$comment()='禹希初的简历']

  表白探求含有解释语句:<!--禹希初的简历-->的<resume>元素。

  九、cdata()

  含意:归来一切cdata典型的结点的汇合。

  示例:

resume[$any$cdata()='禹希初的简历']

  表白探求含有下述语句(必需是径直子结点)<![cdata[禹希初的简历]]>的<resume>元素。

  十、node()

  含意:归来暂时左右文情况中除根结点和属性结点除外的一切结点的汇合,等价于:

"*|pi()|comment()|text()"

  示例:探求一切元素resume,其结果一个结点的名字为"skill":

resume[node()[end()]!nodename()='skill']

  探求一切resume元素的第一个结点:resume/node()[0]。

  十一、textnode()

  含意:归来一切文本典型的结点的汇合。

  示例:探求每一个p元素的第二个文本结点:

p/textnode(1) 或 p!textnode(1)

  十二、text()

  含意:归来一切表白文古字符串的结点的汇合,等价于"cdata()|textnode()"。

  本期的实质就引见至此,另有一个因变量date()在自己的呆板上一试就爆发缺点使欣赏器机动封闭,再有一个因变量pi()自己尚未找到符合的运用本领,就不引见了,下期将报告怎样xsl中运用剧本。[page]

偶尔,咱们大概会蓄意xml文书档案输入时能对个中实质加上少许统计消息大概如编号什么的,运用前方的常识就不太简单实行了。即日将引见两个新元素<xsl:eval>与<xsl:script>,使咱们能轻快处置这个困难。

<xsl:eval>

  含意:计划剧本表白式,输入一个文古字符串。

  语法:

<xsl:eval language="language-name">

  属性:

  language ── 规则所用剧本谈话的名字,可用的属性有"javascript"、"jscript"、"vbscript"、"vbs"等,缺省为"jscript"。

<xsl:script>

  含意:证明全部变量或设置因变量。

  语法:

<xsl:script language="language-name">

  属性:同<xsl:eval>

  示例:

  不知大师对于第四期《跟我学xml》中的例子能否再有回忆?个中的xml文书档案并没有对简历编号,但输入中却加上了小写的罗马数字序号。即日将再举一稍为搀杂少许的例子:

  假设咱们编写一份年末消费统计表,个中须要小计一项,惯例的作法是事前将其算出来,此刻不用了,咱们不妨只给出单项统计,表露时再统计小计一项。请找到《跟我学xml》的第四期,xml文献不用窜改,对xsl文献的窜改如次:

<?xml version="1.0" encoding="gb2312"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl">

<xsl:template match="/"><html><head><title>1999年消费统计</title></head> <body><xsl:apply-templates select="document"/></body></html></xsl:template>

<xsl:template match="document"><h3>1999年消费统计</h3> <table border="1" cellspacing="0"> <th>班组</th><th>四季度</th><th>二季度</th><th>三季度</th><th>四序度</th><xsl:apply-templates select="report"/><tr><td>小计</td><td><xsl:eval>total(this,"q1")</xsl:eval></td><td><xsl:eval>total(this,"q2")</xsl:eval></td><td><xsl:eval>total(this,"q3")</xsl:eval></td><td><xsl:eval>total(this,"q4")</xsl:eval></td></tr></table><xsl:script>function total(node,q){  temp=0;   mark='/document/report/'+q;  v=node.selectnodes(mark);  for(t=v.nextnode();t;t=v.nextnode())  {    temp+=number(t.text);  }  return temp; //小计值}</xsl:script></xsl:template><xsl:template match="report"><tr><td><xsl:value-of select="class"/></td><td><xsl:apply-templates select="q1"/></td><td><xsl:apply-templates select="q2"/></td><td><xsl:apply-templates select="q3"/></td><td><xsl:apply-templates select="q4"/></td></tr></xsl:template>

<xsl:template match="q1|q2|q3|q4"><!--此处尝试产量,如小于即是20则增添一style属性color,其值为red(赤色)--> <xsl:if test=".[value() $le$ 20]"> <xsl:attribute name="style">color:red</xsl:attribute></xsl:if><xsl:value-of/></xsl:template>

</xsl:stylesheet>

上例在欣赏器中的格式(ie5.0或革新本子)

  证明:

  提防到实行截止的变革了吗?黑体局部为增添局部,提防增添局部分为两局部,<xsl:script></xsl:script>必需置于</table>之后,牢记。

  selectnodes() ── 是xmldomobject的一个本领,归来文书档案中一切满意前提的结点的汇合,前提与< xsl:for-each >和select属性的取值沿用同样的写法,不妨加挑选、下标等控制,如探求四季度产量大于即是50的班组:

/document/report/q1[value() $ge$ 50]

  之上写法再有一个更大略的写法:

//q1[value()$ge$50]

  //表白从根结点动身遍历一切结点,探求满意前提的结点,即使文书档案内有同名但意旨各别的结点则不许用此种本领,非不得已不倡导运用。以此为例,即使蓄意统计年总产量量,则不妨下述字符串探求结点(倡导运用结果一种,此种刻画将透彻找到须要汇总的数据):

//*[value()$gt$0] 或 //(q1|q2|q3|q4) 或 /document/report/(q1|q2|q3|q4)

  nextnode() ── 归来结点会合的下一个结点

  number() ── 将供给的参数变换为数值

  下期引见xsl因变量2,用来<xsl:script>及<xsl:eval>中,以及<xsl:if>和<xsl:when>的expr属性。倡导读者群熟习javascript、jscript、vbscript中起码一种,否你能用xsl实行的处事将格外有限。因为篇幅联系,此处不作精细引见。[page]

本期引见多个xsl对于vbscript、jscript减少的本领、属性,以充溢表现xml的上风,用来<xsl:script>、<xsl:eval>标志内表白式的编写或<xsl:if>、<xsl:when>的expr属性。

  一、absolutechildnumber

  含意:归来结点对立于它一切的伯仲(不管名字能否沟通)的序号。

  语法:absolutechildnumber(node)

  参数:node ── 东西,欲归来编号的结点。

  示例:

  1、假设文书档案构造为:<document><head/><body/></document>,个中document为高层结点,下述表白式将输入:

<xsl:eval>absolutechildnumber(this.selectnodes('/document/body').item(0))</xsl:eval>

  2、决定暂时结点对立于其一切伯仲的序号:

<xsl:eval>absolutechildnumber(this)</xsl:eval>

  二、ancestorchildnumber

  含意:从给定结点动身按照给定前辈结点卯归来迩来的前辈结点的序号(对立于同名结点)。即使找不前辈,则归来0。

  语法:ancestorchildnumber(bstrnodename, pnode)

  参数:

  bstrnodename ── 字符串。被探求的前辈结点的名字。

  pnode ── 东西。探求发端场所的结点。

  示例搜索暂时结点迩来的名为report前辈结点:

ancestorchildnumber('report',this)

  三、attributes

  含意:归来结点属性的汇合。

  语法:object.attributes

  参数:object ── 结点东西。

  示例:暂时结点属性的个数

this.attributes.length

  暂时结点第三个属性的值

this.attributs.item(2).value

或this.attributes.item(2).text

或this.attributes(2).text

  提防:即使给定的下标大于属性总和减1将堕落,第一个属性的下标是0。

  四、basename

  含意:归来驰名字空间控制的基真名,即不囊括名字前缀。

  语法:object.basename

  参数:object ── 结点东西

  示例,暂时结点的基真名:this.basename

  五、childnumber

  含意:归来结点对立于同名同族的序号。

  语法:childnumber(object)

  参数:object ── 结点东西

  示例,假设xml文书档案构造如次:

<x><y><z></z></y></x>

  即使暂时结点是z,则childnumber(this)归来1,而absolutechildnumber(this)归来3。

  六、datatype

  含意:设定或读取结点的数据典型。

  语法:设定结点的数据典型 object.datatype=objvalue     读取结点的数据典型 objvalue=object.datatype

  参数:object ── 结点东西。  示例,读取暂时结点的数据典型:

dttype=this.datatype

  七、depth

  含意:指定结点出此刻文书档案树上的深度,即该结点坐落文书档案第几层,高层结点坐落第一层,根结点(即用"/"表白的结点)坐落第0层。

  语法:depth(pnode)

  参数:pnode ── 结点东西

  示例,暂时结点的深度:

depth(this)

  八、firstchild、lastchild

  含意:归来结点的第一个子结点(或结果一个子结点)。

  语法:pnode.firstchild     pnode.lastchild

  参数:pnode ── 结点东西

  示例,暂时结点的第一个结点的名字:

this.firstchild.nodename

  九、formatindex

  含意:用指定的计数体例方法化供给的平头。

  语法:formatindex(lindex, bstrformat)

  参数:

  lindex ── 整型数值或变量

  bstrformat ── 数据方法,可选值有a、a、i、i、1、01(以0打头的数值情势,即使诉求恒定长度的编号如0001、0002则特殊有效)。

  示例,暂时结点的小写罗马数字编号:

formatindex(childnumber(this),'i')

  十、formatnumber

  含意:以指定方法输入数值。

  语法:formatnumber(dblnumber, bstrformat)

  参数:证明同formatnumber,各别之处在乎方法化的不妨是少量。

  示例,对变量a的值方法化为两位少量:formatnumber(a,'#.00'):

  十一、haschildnodes

  含意:即使结点有子结点则归来true(-1),要不为false(0)。

  语法:pnode.haschildnodes()

  提防:与此前引见的因变量各别,此因变量后必需带一个空括号。

  示例,确定暂时结点能否有子结点:

this.haschildnodes

  十二、namespaceuri、prefix

  含意:归来结点卯字空间的全部资源操作符(或前缀)。

  语法:pnode.namespaceuri     pnode.prifix

  十三、nextsibling、previoussibling、parentnode

  含意:归来结点的下一个伯仲(或前一个伯仲、或结点的父结点)。

  语法:pnode.nextsibling     pnode.previoussibling     pnode.parentnode

  提防:对根结点(即"/")运用parentnode本领、对第一个儿童结点运用previoussibling本领、对结果一个儿童结点运用nextsibling本领均会引导缺点,可经过此过联系演算符==(即是)和!=(不即是)来确定一个结点能否某一指定结点,方法为pnode1 = pnode2或pnode2 != pnode2。

  十四、nodename

  含意:归来元素、属性、进口的名字或其余典型结点的一个一定字符串。

  语法:pnode.nodename

  示例,暂时结点的名字:

this.nodename

  十五、nodetype、nodetypestring

  含意:归来结点的典型的数值情势(或字符串情势)。  语法:pnode.nodetype 或 pnode.nodetypestring

  归来值:

 结点典型

 结点典型值

 结点的字符情势刻画

 element

 1

 'element'

 element attribute

 2

 'attribute'

 markup-delimited region of text

 3

 'text'

 processing instruction

 7

 'processing_instruction'

 comment

 8

 'comment'

 document entity

 9

 'document'

  十六、nodetypedvalue

  含意:以结点预订义的数据典型归来结点的值。

  语法:pnode.nodetypedvalue

  示例,假设暂时结点的数据典型是fixed.14.4,下例将以数值归来结点的值,而不是文本一个字符串:

this.nodetypedvalue

  十七、nodevalue

  含意:归来结点的文本。

  语法:pnode.nodevalue

  提防:该本领不必于元素类结点,可用来属性、cdata、解释、文本等结点。

  示例,暂时元素第一个属性的值:

this.attributes(0).nodevalue

  暂时元素内的文本(假设该元素内惟有文本,无其它元素,即<mark>text</mark>,倡导多尝几次控制其真实的用法)。

this.firstchild.nodevalue

  十八、ownerdocument

  含意:归来包括该结点的文书档案的根。

  语法:pnode.ownerdocument

  提防:该本领用来文书档案的根结点将堕落。

  十九、selectnodes

  含意:给定的款式配合运用于暂时结点并归来配合的结点汇合。

  语法:pnode.selectnodes('pattern')

  提醒:pattern的编写与<xsl:for-each>的select属性的值一致,个中以"/"发端表白从文书档案的根动身探求;以"//"发端表遍历文书档案的一切结点;以".."发端表白从暂时结点的父结点发端;即使欲从暂时结点向下探求则不许有之上特出字符打头。

  示例,与暂时结点同名的元素在其父元素内的个数:

childnumber(this.selectnodes("../"+this.nodename+"[end()]").item(0))

  暂时元素内名字为"skill"的元素的个数:

childnumber(this.selectnodes("skill[end()]").item(0))

  二十、selectsinglenode

  含意:与selectnodes一致,各别的只归来配合的第一个结点、而不是结点汇合。

  语法:pnode.selectsinglenode('pattern')

  示例,与暂时结点同名的元素在其父元素内的个数:

childnumber(this.selectsinglenode("../"+this.nodename+"[end()]"))

  暂时元素内名字为"skill"的元素的个数:

childnumber(this.selectsinglenode("skill[end()]"))

  二十一、text

  含意:归来结点与它的子树内的笔墨实质。

  语法:pnode.text

  示例,所有文书档案内的笔墨实质:

this.ownerdocument.text

  暂时元素及其子树的笔墨实质:

this.text

  二十二、xml

  含意:归来结点及后来代的xml表白。

  语法:pnode.xml

  示例,暂时文书档案的xml实质:

this.ownerdocument.xml

  另有几个因变量不作引见,列于其下以供参考,如感爱好,请考察http://msdn.microsoft.com获得精细证明。

formattime(vartime, bstrformat,vardestlocale) formatdate(vardate, bstrformat,vardestlocale)apendchild(newchild)definitionclonenodeinsertbefore(newchild, refchild)parsedremovechild(oldchild)replacechild(newchild, oldchild)specifiedtransformnode(stylesheet)transformnodetoobject(stylesheet,outputobject) uniqueid(pnode)

跟我学xsl(二)图1

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.