Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 根据字母表的范围匹配案例_Xslt_Xslt 2.0 - Fatal编程技术网

Xslt 根据字母表的范围匹配案例

Xslt 根据字母表的范围匹配案例,xslt,xslt-2.0,Xslt,Xslt 2.0,我有下面的XML <para>39B</para> <para>76</para> 我试过的代码 <xsl:template match="text()"> <xsl:analyze-string select="." regex="([\w]+)"> <xsl:matching-substring> <xsl:variable name="regex1">

我有下面的XML

<para>39B</para>
<para>76</para>
我试过的代码

  <xsl:template match="text()">
    <xsl:analyze-string select="." regex="([\w]+)">
      <xsl:matching-substring>
        <xsl:variable name="regex1">
          <xsl:choose>
            <xsl:when test="contains(regex-group(1), '^39[A-P]$')">
              <xsl:text>CAse 1</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <xsl:text>Case 2</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
        <xsl:value-of select = "$regex1"/>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:value-of select="."/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:template>

案例1
案例2
请告诉我如何解决这个问题


感谢使用XSLT2.0,您可以使用正则表达式,因此对于字母数字的情况,您可以使用正则表达式

<xsl:template match="para[matches(., '^39[A-P]$')]">case1</xsl:template>
case1
第二种情况下的简单数字比较

<xsl:template match="para[. ge 72 and . le 85]">case2</xsl:template>
案例2

请解释这些范围在输入XML和XSLT代码中的位置。嗨,martin,有没有一种方法可以将其与
包含
一起使用,比如
包含(text(),“^39[a-P]$”)
在文本模板中?正则表达式匹配的函数称为
匹配
,不
包含只进行子字符串包含测试的
。因此,如果要使用正则表达式,必须使用
匹配项。至于在文本节点上使用它,当然,如果需要,您可以这样做,但是请注意,我的建议故意使用
^
$
锚定模式,以确保内容与模式完全相同,而不只是包含在元素中。如果要忽略的模式前后可能有其他字符,请使用
para[matches(,'39[A-P]')]
。我已根据您的建议用我尝试过的内容更新了我的问题,但这不起作用,请您帮助我修复它。我要求
包含
,因为我想在
选择
中使用它,有多个这样的实例28,我只需要使用
text()
模板匹配来获取内容如果你想使用正则表达式匹配,你需要使用
匹配
函数,而不是
包含
函数。不管是XSLT
xsl:template match=“…”
还是
xsl:when test=“…”
。至于“这不起作用”,例如,示例输入有
39B
,您现在添加的代码有
regex=“([\w]+)\([\w]+)”
,这永远不会匹配,因为
para
元素中没有点
。漂亮的XSLT表达式,加上一个。
<xsl:template match="para[. ge 72 and . le 85]">case2</xsl:template>