使用XPATH区分方案

时间:2015-04-15 09:21:13

标签: xpath xslt-2.0

我有以下情况。

**Case1:**
<para>1A/66</para>
<para>1A/34S/4</para>
<para>1/66</para>

**Case 2:**
<para>A/66</para>
<para>A1/1</para>

这里,解释是如果para以字母开头(这里是A,它可以是任何字母),它应该打印case 2否则它应该打印case 1

请让我知道我该怎么做。

这是DEmo

2 个答案:

答案 0 :(得分:1)

你在这里:     

    <xsl:template match="/">
      <hmtl>
        <head>
          <title>New Version!</title>
        </head>
        <body>
        <xsl:call-template name="print-param" />
        <xsl:apply-templates select="child::*"/>
        </body>
      </hmtl>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>

    </xsl:template>

    <xsl:template match = "body">
        <!-- Match cases -->
    </xsl:template>

    <xsl:template name = "print-param">
        <!-- Match cases -->
        **Case1:**
         <xsl:for-each select=".//para[matches(., '^[A-Za-z]\.*')]">
           <para><xsl:value-of select="." /></para>
         </xsl:for-each>
        **Case 2:**
         <xsl:for-each select=".//para[not(matches(., '^[A-Za-z]\.*'))]">
           <para><xsl:value-of select="." /></para>
         </xsl:for-each> 
    </xsl:template>

</xsl:transform>

选中此demo

答案 1 :(得分:1)

使用XSLT 2.0,您可以使用例如

来获得正则表达式支持
<xsl:template match="para[matches(., '^[a-zA-Z]')]">case 2</xsl:template>

<xsl:template match="para[matches(., '^[^a-zA-Z]')]">case 1</xsl:template>

当然,你可以使用不同的正则表达式匹配非ASCII字母,如果&#34;可以是任何字母表&#34;用来表示其他字母。