首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何切换case xsl:analyze-string而不是嵌套?

如何切换case xsl:analyze-string而不是嵌套?
EN

Stack Overflow用户
提问于 2018-01-13 20:29:33
回答 1查看 367关注 0票数 0

在XSLT中,我们可以使用xsl:analyze-string通过regex表达式检查输入字符串,得到regex-group。

例如,我有以下几串形状:

区段:20米

三角形: 30m 30m 30m

矩形: 10m 10m 30m 30m

...so on (但它是有限的)

我想使用xml元素用xsl:analyze-string来标记它们。

方法1:

代码语言:javascript
复制
<xsl:for-each select="$lines">
    <xsl:analyze-string select="." regex="segment: (\w*)">
        <xsl:matching-substring>
            <segment seg1="{regex-group(1)}"/>
        </xsl:matching-substring>
    </xsl:analyze-string>

    <xsl:analyze-string select="." regex="triangle: (\w*), (\w*), (\w*)">
        <xsl:matching-substring>
            <triangle seg1="{regex-group(1)}" seg2="{regex-group(2)}" seg3="{regex-group(3)}"/>
        </xsl:matching-substring>
    </xsl:analyze-string>

    <xsl:analyze-string select="." regex="rectangle: (\w*), (\w*), (\w*), (\w*)">
        <xsl:matching-substring>
            <rectangle seg1="{regex-group(1)}" seg2="{regex-group(2)}" seg3="{regex-group(3)}" seg4="{regex-group(4)}"/>
        </xsl:matching-substring>
    </xsl:analyze-string>
 </xsl:for-each>

这种方法有一个缺点,那就是:如果我们有一些不规则的数据,它会忽略,但它应该报告错误消息。

方法2:

在xsl:non-matching-substring元素中嵌套xsl:analyze-string,但是如果我有8种以上的形状,就会有非常丑陋的代码。

解决此问题的最好方法是将switch case或if else-if语法集成到xsl:analyze-string中。

那么有没有办法在XSLT中切换大小写xsl:analyze-string呢?

EN

回答 1

Stack Overflow用户

发布于 2018-01-13 23:52:51

使用模板匹配。

在XSLT 3.0中:

代码语言:javascript
复制
  <xsl:template match=".[starts-with(., 'segment)]">
    <xsl:analyze-string select="." regex="segment: (\w*)">
        <xsl:matching-substring>
            <segment seg1="{regex-group(1)}"/>
        </xsl:matching-substring>
    </xsl:analyze-string>
  </xsl:template>

  <xsl:template match=".[starts-with(., 'triangle)]">
    <xsl:analyze-string select="." regex="triangle: (\w*), (\w*), (\w*)">
        <xsl:matching-substring>
            <triangle seg1="{regex-group(1)}" seg2="{regex-group(2)}" seg3="{regex-group(3)}"/>
        </xsl:matching-substring>
    </xsl:analyze-string>
  </xsl:template>

等。

然后

代码语言:javascript
复制
<xsl:apply-templates select="$lines"/>

与原子值匹配的模板规则是3.0中的新功能。在2.0中,只要输入($lines)是一个节点序列,而不是一个字符串序列,就可以使用相同的技术。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48239880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档