- 浏览: 73503 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
jinbo0120:
受教了,我还一直存在疑问呢,原来是1.5开始使用的...看来我 ...
5.0for循环 -
persistC:
1、到底在哪用cascade=&q ...
hibernate.hbm.xml总结 -
duanyong:
看到xml就烦。不知道为什么。嘿嘿。
hibernate.hbm.xml总结
<xsl:analyze-string>是XSLT2.0新增的指令,语法:
<xsl:analyze-string select="xpathExpression" regex="regExpression" flags="flag">
该指令的主要用途为分析字符串。select属性用于指定要分析的字符串,即inputString。
regex指定分析规则--正则表达式。
<xsl:analyze-string>可能包含如下内容元素(子元素):
1,<xsl:matching-substring>
<!---some instruction-->
</xsl:matching-substing>
用于指定符合正则表达式的子字符串所要执行的动作。
2,<xsl:non-matching-substring>
<!---some instruction-->
</xsl:non-matching-substring>
用于指定不符合正则表达式的子字符串所要执行的动作。
<xsl:analyze-string>的执行过程为:首先将输入字符串按照正则表达式分割成若干子字符串。然后依次对每个子字 符串进行操作:如果子字符串符合正则表达式,那么就执行<xsl:matching-substring>指令(如果存在该指令的话);如果 不符合正则表达式,那么就执行<xsl:non-matching-substring>指令(如果存在该指令的话)。
举例来说
<xsl:analyze-string select="abcd1234efg7890" regex="[a-z]+">
<xsl:matching-substring>
<!---some instructions-->
</xsl:matching-substring>
<xsl:non-matching-substring>
<!---some instructions-->
</xsl:non-matching-substring>
</xsl:analyze-string>
首先输入字符串按正则表示被分为四个子字符串--abcd,1234,efg,7890。
接着执行的指令为abcd(matching-instruction)-->1234(non-matching- instruction)-->efg(matching-instruction)-->7890(non-matching- instruction)。
下面举个具体的例子。
XML源文件:
<?xml version="1.0"?>
<root>
<branch>2500ppoabcuv12405tyuvirk</branch>
</root>
XSLT文件:
<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="regex" select="'\d{4}'"/>
<xsl:analyze-string select="root/branch" regex="{$regex}">
<xsl:matching-substring>
<digits><xsl:value-of select="."/></digits>
</xsl:matching-substring>
<xsl:non-matching-substring>
<word><xsl:value-of select="."/></word>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
转换结果:
<digits>2500</digits>
<word>ppoabcuv</word>
<digits>1240</digits>
<word>5tyuvirk</word>
如果将regex的属性直接写成:regex="\d{4}",我们得到的输出结果是:
<word>2500ppoabcuv1</word>
<digits>24</digits>
<word>05tyuvirk</word>
跟正确的结果不符,这是为什么呢?
这是因为在一个非xpath expression中大括号(curly brackets)括起来的内容表示xpath expression。所以,直接写成regex="\d{4}"时,真实的正则表达式变成了\d4。
要想得到\d{4},正则表达式需要写成regex="\d{{4}}"。
在XSLT中一般认为存在两种表示式,一种是xpath表达式,另一种是非xpath表达式。
用select属性指定的表达式一般是xpath表达式。例如:select="root/branch",表示root下的所有branch节点;但href="root/branch"则表示字符串root/branch。
在xpath表达式中不能使用大括号(curly brackets)。
在非xpath表达式中则需要使用大括号(curly brackets)来引用xpath表达式。
大括号在非xpath表达式中的使用一般有如下几种情况:
1,引用节点或属性
{a},{@a}
2,引用变量
{$var}
3,引用字符串
{'#abc'}
4,引用数字
{1}
5,{{expression}}这种形式,表示{expression}字符串。
转载地址:http://electiger.blog.51cto.com/112940/19722
其实,正则表达式是XPATH2.0定义的,暂且放在XSLT里说吧。
还是举例来说正则表达式的用法吧。
XML源文件任意,XSLT文件:
<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/XMLSchema">
<xsl:template match="/">
<xsl:variable name="file" select="'aa.txt'"/>
<xsl:variable name="string" select="unparsed-text($file,ISO-8859-1)" />
<xsl:analyze-string select="$string" regex="\n" >
<xsl:non-matching-substring>
<row>
<xsl:analyze-string select="." regex='("([^"]*)")|([^,]+)'>
<xsl:matching-substring>
<cell>
<xsl:value-of select="regex-group(2)"/>
<xsl:value-of select="regex-group(3)"/>
</cell>
</xsl:matching-substring>
</xsl:analyze-string>
</row>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
摘自XSLT2.0 porgrammer's reference(稍有改动)。
aa.txt的内容:
123,"Mary Jones","IBM","USA",1997-05-14
423,"Barbara Smith","General Motors","USA",1996-03-12
6721,"Martin McDougall","British Airways","UK",2001-01-15
830,"Jonathan Perkins","Springer Verlag","Germany",2000-11-17
得到输出结果:
<?xml version='1.0' ?>
<row xmlns:xs="http://www.w3.org/XMLSchema">
<cell>123</cell>
<cell>Mary Jones</cell>
<cell>IBM</cell>
<cell>USA</cell>
<cell>1997-05-14</cell>
</row>
<row xmlns:xs="http://www.w3.org/XMLSchema">
<cell>423</cell>
<cell>Barbara Smith</cell>
<cell>General Motors</cell>
<cell>USA</cell>
<cell>1996-03-12</cell>
</row>
<row xmlns:xs="http://www.w3.org/XMLSchema">
<cell>6721</cell>
<cell>Martin McDougall</cell>
<cell>British Airways</cell>
<cell>UK</cell>
<cell>2001-01-15</cell>
</row>
<row xmlns:xs="http://www.w3.org/XMLSchema">
<cell>830</cell>
<cell>Jonathan Perkins</cell>
<cell>Springer Verlag</cell>
<cell>Germany</cell>
<cell>2000-11-17</cell>
</row>
我们可以看到寻找与regex匹配的字符串的过程是:首先从input的第一个字符开始,看能否找到,如果找到了,那么就截取该匹配字符,然后从后面的字符开始,再次寻找,如果未找到,就将第一个字符确定为不匹配字符,然后从第二个字符开始寻找,一直到查找完所有字符。
原来的XSLT文件正则表达式匹配的模式为:
<xsl:analyze-string select="," regex='("([^"]*?)")|([^,]+?),'>
* 后面跟一个问号(?),代表非贪婪原则。意思是,一旦找到类似"xxxxx"形式的字符串就认定为匹配字符串。但是在这里没有必要,因为中间的xxxx不 能为"(双引号),也就防止了出现贪婪的"xxx""xxxx"xxx"的形式。也算是对大师提出的一个疑问吧。呵呵。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/superwfei/archive/2008/04/07/2256836.aspx
发表评论
-
XSLT2.0---正则表达式
2009-06-06 16:27 969其实,正则表达式是XPATH2.0定义的,暂且放在XSLT里说 ... -
XSLT2.0----<xsl:analyze-string>
2009-06-06 16:26 921<xsl:analyze-string>是XS ... -
XSLT2.0----<xsl:variable>和<xsl:sequence>
2009-06-06 16:25 2976我们知道,<xsl:variable>可以定义变量 ... -
XSLT2.0----XPATH2.0序列
2009-06-06 16:24 959严格说来XPATH2.0和XSLT2.0并无直接联系,但是XP ... -
XSLT2.0----字符映射
2009-06-06 16:23 685XSLT2.0提供了字符映射功能。 对于特殊字符或特殊字符, ... -
XSLT2.0---临时结果树
2009-06-06 16:23 1039<xsl:variable>可不是新东西了,它 ... -
XSLT2.0---多文件输出
2009-06-06 16:22 968<xsl:result-document>指 ... -
XSLT2.0---分组
2009-06-06 16:20 1228看了些关于XSLT2.0的东西,先来总结一下分组吧。 &l ... -
XSLT 2.0 的新特性
2009-06-05 11:44 1550XSLT 2.0 的新特性 关键 ... -
XSLT Designer快速入门指南
2008-12-15 21:07 904目录 概述 配 ... -
XSLT document()函数在IE与Firefox中的区别
2008-12-15 21:07 950XSLT 中 document() 函数的作用是用来访问扩展X ... -
了解XSLT
2008-12-15 21:06 956什么是XSLT? XSLT的英文标准名称为eXtensibl ... -
XSL中count()的使用
2008-12-15 21:05 1059XSL中用count()来取得xml中某种节点的个数 list ... -
XSL学习心得-制作图像超链接
2008-12-15 21:04 805这是我今天学习的时候遇到的另一个问题,做图像超链接要把链接地址 ... -
xslt的简单使用[xml-->html]
2008-12-15 21:03 1024XSLT命令[xml格式转换] 1.循环 <xsl:f ... -
XSL中利用xsl:for-each时给每一项添加序号
2008-12-15 21:02 1742经常用for-each来循环读取XML中的某个节点集,但常常需 ... -
第四章:XPath的语法
2008-12-15 21:00 9834.XPath的语法 我们在前 ... -
第三章:XSLT的元素语法
2008-12-15 20:59 889通过前面两章的介绍,我们已经对XSLT的基本概念和它的转换过程 ... -
第二章:XSLT的实例
2008-12-15 20:59 10112. XSLT的实例 2.1 XSLT如何转换XML 2.2 ... -
第一章:XSLT的概念
2008-12-15 20:58 7991.XSLT的概念 1.1 什么是XSLT 1.2 为什么要 ...
相关推荐
在XSLT 2.0及更高版本中,`replace()` 函数被引入,允许用户根据正则表达式替换字符串中的部分文本。但在XSLT 1.0中,这个函数并未定义,因此如果你在1.0环境中使用它,会收到此错误。 **XSLT 1.0与2.0的区别:** 1...
- **XSLT 2.0**引入了更多高级功能,如支持正则表达式、日期和时间操作、函数库的扩展等。 - **XSLT 3.0**进一步增强了性能,加入了流式处理、静态类型检查和异步处理等功能。 ### 6. 实际应用 XSLT广泛应用于数据...
6. XSLT 1.0与XSLT 2.0/3.0的区别:XSLT 2.0引入了许多新功能,如正则表达式支持、函数库扩展、更多数据类型和更强大的样式表组合能力。XSLT 3.0进一步增强了这些特性,如支持静态类型检查、流式处理API和异步处理。...
正则搜索、替换字符串 搜索结果列表 搜索结果相关代码预览 替换结果相关代码预览 可取消当前搜索操作 双击定位结果代码 更新记录: v2.3.0.74 调整过滤器应用时的算法 在快捷菜单中增加"显示搜索对话框"项 ...
`html-to-xml`将HTML内容清理并转换为有效的XML,`regexp`执行正则表达式搜索/替换,`xpath`则在XML源中查找XPath表达式,`xquery`在XML源上执行查询,`xslt`则应用XSL转换。`script`元素允许使用基于Java的脚本语言...
- **XSLT 2.0**:于2007年发布,引入了许多新功能,如序列类型、正则表达式路径步骤等,显著增强了XSLT的能力。 - **XSLT 3.0**:进一步改进了处理大规模数据集的能力,支持更复杂的查询和表达式。 #### 三、XSLT的...
接下来,我们需要安装pcre(Perl Compatible Regular Expressions)库,它是PHP处理正则表达式的关键组件。你可以从源代码编译安装: ```bash cd /usr/local/src wget ftp://ftp.csx.cam.ac.uk/pub/software/...
- `--with-xsl=/usr`:XSLT支持。 - `--enable-zend-multibyte`:Zend多字节支持。 - `--enable-zip`:ZIP支持。 - `--with-pcre-regex=/usr`:PCRE正则表达式支持。 以上配置选项涵盖了PHP的各种功能和扩展支持,...
AjaxWeb 基于Ajax的Web 2.0模式的刷新模式 AsyncAjaxSample Ajax异步调用的完整示例 第2章(/C02/) 2.1.htm 3段JS使用形式 2.2.htm 不同浏览器使用“<noscript></noscript>” 2.3....
5.17.4 正则验证控件(RegularExpressionValidator) 5.17.5 自定义逻辑验证控件(CustomValidator) 5.17.6 验证组控件(ValidationSummary) 5.18 导航控件 5.19 其他控件 5.19.1 隐藏输入框控件(HiddenField) ...
5.17.4 正则验证控件(RegularExpressionValidator) 5.17.5 自定义逻辑验证控件(CustomValidator) 5.17.6 验证组控件(ValidationSummary) 5.18 导航控件 5.19 其他控件 5.19.1 隐藏输入框控件(HiddenField) ...
5.17.4 正则验证控件(RegularExpressionValidator) 5.17.5 自定义逻辑验证控件(CustomValidator) 5.17.6 验证组控件(ValidationSummary) 5.18 导航控件 5.19 其他控件 5.19.1 隐藏输入框控件(HiddenField) ...
5.17.4 正则验证控件(RegularExpressionValidator) 5.17.5 自定义逻辑验证控件(CustomValidator) 5.17.6 验证组控件(ValidationSummary) 5.18 导航控件 5.19 其他控件 5.19.1 隐藏输入框控件(HiddenField) ...
5.17.4 正则验证控件(RegularExpressionValidator) 5.17.5 自定义逻辑验证控件(CustomValidator) 5.17.6 验证组控件(ValidationSummary) 5.18 导航控件 5.19 其他控件 5.19.1 隐藏输入框控件(HiddenField) ...
5.17.4 正则验证控件(RegularExpressionValidator) 5.17.5 自定义逻辑验证控件(CustomValidator) 5.17.6 验证组控件(ValidationSummary) 5.18 导航控件 5.19 其他控件 5.19.1 隐藏输入框控件(HiddenField) ...