XSL学习笔记4 XSLT模式匹配的语法-阿里云开发者社区

开发者社区> 技术小阿哥> 正文

XSL学习笔记4 XSLT模式匹配的语法

简介:
+关注继续查看
 
模板规则通过使用模式来匹配文档树的节点。模式指定一组条件,用于选择要处理的节点。
 
模式匹配的语法不光可以在<xsl:template>元素的match属性中使用,还可以在<xsl:apply-templates>、<xsl:value-of>、<xsl:for-each>、<xsl:copy-of>、<xsl:sort>、<xsl:variable>和<xsl:param>元素的select属性中使用。
 
下面列出常用的模式匹配的用法:
 
1、匹配根节点
例如:<xsl:template match="/">,表示匹配根节点。
 
2、匹配元素节点
例如:<xsl:template match="employees">,表示匹配employees元素节点。
 
3、使用通配符
例如:<xsl:template match="*">,表示匹配任何元素。
 
4、使用@匹配属性
用@加上数姓名,可以用于匹配属性节点。
例如:<xsl:template match="@mode">,表示匹配mode属性节点。不过要注意的是,XSLT处理器在遍历节点的树状结构时,并不处理属性节点。如果要让处理器处理属性节点,必须显式调用<xsl:apply-templates>元素,并使用select属性选择属性节点。
 
还可以将@与星号(*)一起使用,例如:<xsl:template match="@*">,表示匹配任意的属性节点。
 
5、使用斜杠(/)匹配子节点
例如:<xsl:template match="employees/employee">,表示匹配employees元素节点下的任意的employee子节点。
 
6、使用双斜杠(//)匹配后代节点
有时候,希望对某一类元素节点进行处理,而不管该节点在树状结构中所处的位置,就可以使用双斜杠(//)来匹配节点。例如:<xsl:template match="//name">,表示匹配根节点下任意的name元素节点,而不管该节点所处的位置。例如:<xsl:template match="employees//name">,表示匹配employees元素节点下的任意的name元素节点。
 
7、使用或操作符(|)
使用或操作符(|)来可选择地匹配多个节点。例如:<xsl:template match="name|age">,表示匹配任意的name或age元素节点。
例如:<xsl:template match="employee/name!monthly_pay/@mode">,表示匹配employee元素节点下的任意name子节点,或monthly_pay元素节点的mode属性节点。
 
8、使用[]操作符
可以在[]中指定布尔表达式,用于在节点集中更精确地匹配某一个节点。
例如:如果只想匹配第一个employee元素,可以这样写:<xsl:template match="employee[1]">,表示匹配第一个employee子元素节点。这和上面的写法是等价的:
<xsl:template match="employee[position()=1]">
position()是一个函数调用,返回节点在上下文中的当前位置,然后判断该位置是否等于1.
 
9、使用node()匹配节点
node()表示匹配除属性节点和根节点之外的其他任何节点。
例如:<xsl:template match="node()">.
 
10、使用text()匹配文本节点
text()表示匹配任意的文本节点,例如:<xsl:template match="text()">。
 
11、使用processing-instruction()匹配处理指令
processing-instruction()表示匹配任的处理指令节点。
例如:<xsl:tempate match="processing-instruction()">。processing-instruction()还可以带一个参数,用于指定处理指令目标的名字,这样,只有和这个名字相同的处理指令才能被匹配。
 
12、使用comment()匹配注释
comment()表示匹配任意的注释节点,例如:<xsl:template match="comment()">。
 
13、使用id()进行匹配
一个ID类型的属性唯一标识了XML文档中的一个元素。
例如:<xsl:template match="id('E-2001320001')">表示匹配拥有ID类型属性并且其值等于E-2001320001的元素。要注意的是,要让这种方式能够工作,必须在源XML文档的DTD中声明ID类型的属性,可以是内部的或外部的DTD,如果源文档那个没有DTD,则id()函数就不能正常工作。

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/60446,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9490 0
学习设计模式六大设计原则之二
四、接口隔离原则(Interface Segregation Principle,ISP) 1、实例接口;在Java中使用关键字new产生一个实例,它是对一个类型事物的描述,它是一个接口。比如定义一个Person类,使用new实例化Person。
937 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13176 0
多线程编程学习四(Lock 的使用)
一、前言     本文要介绍使用Java5中 Lock 对象,同样也能实现同步的效果,而且在使用上更加方便、灵活,主要包括 ReentrantLock 类的使用和ReentrantReadWriteLock 类的使用。
813 0
机器学习实战:基于概率论的分类方法:朴素贝叶斯(源码解析,错误分析)
按照惯例,先把代码粘到这里 from numpy import * def LoadDataSet(): postingList = [['my', 'dog', 'has', 'flea', 'proble...
835 0
13694
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载