`
persistC
  • 浏览: 73501 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XSLT2.0----<xsl:analyze-string>

    博客分类:
  • XSLT
阅读更多
<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}字符串。
分享到:
评论

相关推荐

    Xslt语法参考手册.pdf

    - **语法**:`&lt;xsl:attribute name="string"&gt;string&lt;/xsl:attribute&gt;` - **属性**: - `name`:必需,用于指定属性名。 - **示例**: ```xml &lt;xsl:template match="book"&gt; &lt;book id="{isbn}"&gt; &lt;xsl:...

    XSL学习 XSL学习.pdf

    &lt;td&gt;&lt;xsl:value-of select="性别"/&gt;&lt;/td&gt; &lt;td&gt;&lt;xsl:value-of select="描述"/&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/xsl:for-each&gt; ``` 这里的 `&lt;xsl:for-each&gt;` 选取了所有 `会员` 节点,并对每个节点执行一次模板中的代码。 #### 七...

    Xsl参考(pdf)

    `&lt;xsl:apply-imports&gt;` 元素在XSLT中用于执行从外部样式表导入的模板。当宿主样式表中有匹配规则时,`&lt;xsl:apply-imports&gt;` 会先调用导入的样式表中的对应模板,然后才执行宿主样式表中的模板。这在XSLT中提供了一种...

    XSL中进行字符串替换

    &lt;xsl:with-param name="FromString" select="$FromString"/&gt; &lt;xsl:with-param name="ToString" select="$ToString"/&gt; &lt;/xsl:call-template&gt; &lt;/xsl:when&gt; &lt;xsl:otherwise&gt; &lt;!-- 没有找到子字符串,直接输出原...

    XSLT 元素使用说明

    这意味着当遇到`&lt;xsl:apply-imports&gt;`时,XSLT处理器会查找并应用任何通过`&lt;xsl:import&gt;`指令引入的模板。 - 这个元素常用于继承机制,使得子样式表能够继承父样式表的功能,同时还能覆盖或扩展父样式表的行为。 - ...

    xml+xsl中分割字符

    &lt;xsl:when test="contains($str,',')"&gt;&lt;xsl:value-of select="substring-before($str,',')"/&gt;&lt;/xsl:when&gt; &lt;xsl:otherwise&gt;&lt;xsl:value-of select="$str"/&gt;&lt;/xsl:otherwise&gt; &lt;/xsl:choose&gt; &lt;/xsl:attribute&gt; &lt;/...

    XML应用开发(软件品牌)-1期 第5单元 单元测试卷-使用XSLT显示XML文档.doc

    2. XSLT的流程控制包括`&lt;xsl:if&gt;`进行条件判断,`&lt;xsl:for-each&gt;`进行循环,以及`&lt;xsl:choose&gt;`, `&lt;xsl:when&gt;`, `&lt;xsl:otherwise&gt;`进行多分支选择。例如: ```xml &lt;xsl:for-each select="cd"&gt; &lt;xsl:if test="price ...

    XSLT元素使用说明

    `&lt;xsl:apply-imports&gt;`元素在XSLT中被用来执行由`&lt;xsl:import&gt;`语句导入的样式表中的模板。当XSLT处理器遇到`&lt;xsl:apply-imports&gt;`元素时,它将查找是否有任何适用的模板来自已导入的样式表,并执行它们。这在需要...

    [xslt]xml文件

    XSLT提供了丰富的功能,包括条件判断(`&lt;xsl:if&gt;`)、循环(`&lt;xsl:for-each&gt;`)、模板匹配(`&lt;xsl:template&gt;`)以及函数调用等,使得XML数据可以根据需要被灵活地呈现和转换。 在实际应用中,XSLT通常与XML解析器...

    XSLT.rar_xslt

    例如,如果“原料库.XML”中的数据组织为`&lt;material&gt;&lt;name&gt;原料A&lt;/name&gt;&lt;origin&gt;中国&lt;/origin&gt;&lt;price&gt;100&lt;/price&gt;&lt;/material&gt;`,我们可以编写模板匹配`&lt;material&gt;`元素,然后提取出`&lt;name&gt;`、`&lt;origin&gt;`和`&lt;price&gt;`...

    xslt元素使用说明

    XSLT还包含了更多其他元素和功能,例如 `&lt;xsl:decimal-format&gt;`、`&lt;xsl:element&gt;`、`&lt;xsl:key&gt;` 等等。每个元素都有其独特的用途,了解它们可以帮助开发人员更高效地进行XML数据的转换和处理。接下来将继续介绍更多...

    使用XSLT和XML创建Excel

    &lt;xsl:value-of select="position"/&gt;&lt;xsl:text&gt;\t&lt;/xsl:text&gt; &lt;xsl:value-of select="salary"/&gt;&lt;xsl:text&gt;\n&lt;/xsl:text&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; ``` 在这个XSLT样式表中,我们定义了两个模板:一个...

    XSLT参考手册(根据w3schools的XSLT教程翻译改编而成)

    `&lt;xsl:apply-imports&gt;` 元素在 XSLT 中用于应用之前通过 `&lt;xsl:import&gt;` 命令导入的样式表中的模板规则。当 XSLT 处理器遇到 `&lt;xsl:apply-imports&gt;` 元素时,它会查找当前上下文中是否有匹配的模板存在于已导入的...

    xslt总结及使用xslt将xml显示的例子

    &lt;b&gt;Author:&lt;/b&gt; &lt;xsl:value-of select="author"/&gt; &lt;/li&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; ``` 在这个例子中,我们首先定义了一个匹配根元素(`/`)的模板,它创建一个HTML页面并应用到XML文档的`&lt;books&gt;`元素...

    eclipse-testng 离线包下载

    &lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://exslt.org/math" xmlns:testng="http://testng.org"&gt; &lt;xsl:output method="html" indent="yes" omit...

    xslt介绍

    8. `&lt;xsl:param&gt;` 和 `&lt;xsl:with-param&gt;` 元素:参数在XSLT中用于传递值。`&lt;xsl:param&gt;`定义参数,通常用于模板内部;而`&lt;xsl:with-param&gt;`用于向模板传递参数值。 ```xml &lt;xsl:param name="paramName" select=...

    用 xsl essage 调试样式表

    &lt;xsl:message&gt;Matched root node&lt;/xsl:message&gt; &lt;xsl:apply-templates select="*"/&gt; &lt;/xsl:template&gt; &lt;xsl:template match="html" xmlns:html="http://www.w3.org/1999/xhtml"&gt; &lt;xsl:message&gt;Matched ...

    合并2个结构相同的xml文件

    在XSL中,`&lt;xsl:for-each&gt;`指令用于遍历XML文件中的元素,而`&lt;xsl:merge&gt;`元素(在XSLT 2.0及以上版本中提供)则专门用于合并数据。 以下是一个简单的XSL转换示例,展示了如何合并两个结构相同的XML文件: ```xml ...

    XML应用开发(软件品牌)-1期 5.4案例分析-使用XSL流程控制语言.doc

    在XSLT中,我们使用`&lt;xsl:if&gt;`元素来根据一个布尔表达式的值决定是否输出特定内容。例如,在案例1(element-if.xslt)中,我们筛选出Category属性为"计算机"的Book元素进行输出。具体语法结构如下: ```xml &lt;xsl...

Global site tag (gtag.js) - Google Analytics