使用 XPATH 区分场景

differentiate scenarios using XPATH

我有以下情况。

**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

给你:

    <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

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>

当然,如果 "can be any alphabet" 表示其他字母,您也可以使用不同的正则表达式来匹配非 ASCII 字母。