XSL学习教程:运算符和函数(2)
发布时间:2008-01-22 18:24:00
本期学习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()le3]
注意: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)lt30] 或 resume[agelt30]
五、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[anyattribute()='ABC'] 或 resume[any@*='ABC']
寻找所有的resume元素,满足条件至少有一个子元素有一个属性的值为"ABC":
resume[any*/attribute()='ABC'] 或 resume[any*/@*='ABC']
八、comment()
含义:返回所有注释结点。
示例:
resume[anycomment()='禹希初的简历']
表示寻找含有注释语句:<!--禹希初的简历-->的<resume>元素。
九、cdata()
含义:返回所有CDATA类型的结点的集合。
示例:
resume[anycdata()='禹希初的简历']
表示寻找含有下述语句(必须是直接子结点)<![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中使用脚本。


猜你喜欢
- 本篇文章来介绍一道非常常见的面试题,到底有多常见呢?可能很多面试的开场白就是由此开始的。那就是 new 和 make 这两个内置函数的区别。
- 前言本文章仅记录某次内网渗透过程中遇到的MySQL 采用UDF提权等方式进行获取权限,文章中内容仅用于技术交流,切勿用于非授权下渗透攻击行为
- 前言检测图像中对象颜色的一种简单方法是首先将图像从 RGB 转换为 HSV 颜色空间,然后使用一系列色调检测对象,这可以通过使用 OpenC
- 前言:我们在打印一些 PDF 文件的时候可能会遇见加密不能打印的情况,需要提供密码才能打印。如果直接在浏览器中浏览 PDF 文件,它不能调取
- 用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜索呢?比如,当在搜索条件框内输入“中国人民”时,自动从中提取“
- 本文实例为大家分享了python实现电子书翻页的具体代码,供大家参考,具体内容如下1.题目:电子书翻页:(1)自动翻页:每次默认读三行,读完
- Python内置模块logging管理不同级别log打印和存储,非常方便,从此告别了使用print打桩记录,我们来看下logging的魅力吧
- 下面代码写的是js验证检查输入的字符是否是全角的函数:效果演示:<script> function i
- Vue实践分享(三)在实际项目的开发过程中,经常会遇到页面还没渲染完成而插件就已经开始加载的问题,这样就会导致显示和功能出错。可以通过Vue
- 1. 什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表
- 本文详细归纳整理了Python中列表、字典、元组、集合数据结构。分享给大家供大家参考。具体分析如下:列表:shoplist = ['
- 本文实例为大家分享了vue自定义过滤器创建和使用方法,供大家参考,具体内容如下过滤器:生活中有很多例子,净水器 空气净化器 。过滤器的作用:
- 学习目的:掌握下拉列表框的用法,并理解AutoPostBack属性; 理解IsPoskBack及用法; 初识DataTable的
- 预测结果转为numpy:logits=model(feature)#如果模型是跑在GPU上result=logits.data.cpu().
- gitignore是什么文件就是git软件要忽略的文件列表,如果要忽略某些文件,,在Git工作区的根目录下创建一个特殊的.gitignore
- 我们可以利用err对象来判断。当程序没有出现错误就说明已经执行了sql操作: sql="insert into
- 在pc端开发,模态框是一个很常用的插件,之前一直用的第三方插件,比如bootstrap,jQuery的模态框插件,最近还用了elementU
- 现在视频号非常火热,之前在做抖音和快手的人就直接把之前的视频直接搬运过来了。但是从抖音app下载的视频都是带官方水印的?这个是怎么去掉的?哦
- 目录最终版本过程借鉴代码思考urllib.request和requestsBeautifulSoup优化处理总结代码复制可直接使用,记得pi
- 实现思路:分为两部分,第一部分,获取网页上数据并使用xlwt生成excel(当然你也可以选择保存到数据库),第二部分获取网页数据使用IO流将