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
在XSLT1.0中,如果值在字符串值中包含数字_Xslt_Xslt 1.0 - Fatal编程技术网

在XSLT1.0中,如果值在字符串值中包含数字

在XSLT1.0中,如果值在字符串值中包含数字,xslt,xslt-1.0,Xslt,Xslt 1.0,我有一个复杂的地址字符串,或者说是不同的可能格式,我需要将其拆分为道路名称、门牌号、楼层、位置左、右、正中门或门/房间号 除了最后一位之外,我还成功地完成了所有工作,其中伪包含: <xsl:choose> <xsl:when test="contains(@addressFarLeft, ANY_NUMERIC_VALUE_ANYWHERE)"> <door>NUMERICVALUE</

我有一个复杂的地址字符串,或者说是不同的可能格式,我需要将其拆分为道路名称、门牌号、楼层、位置左、右、正中门或门/房间号

除了最后一位之外,我还成功地完成了所有工作,其中伪包含:

<xsl:choose>
                <xsl:when test="contains(@addressFarLeft, ANY_NUMERIC_VALUE_ANYWHERE)">
                  <door>NUMERICVALUE</door>
                </xsl:when>
                <xsl:otherwise></xsl:otherwise>
              </xsl:choose>
我很确定我不能仅仅使用某种形式的包含,但是接下来呢

值是动态设置的,但以下是一些可能的值:

<xsl:variable name="addressFarLeftValue">.th.</xsl:variable> =>
no numeric value, do nothing

<xsl:variable name="addressFarLeftValue">.1.</xsl:variable> =>
   produce:  <door>1</door>

<xsl:variable name="addressFarLeftValue">, . tv </xsl:variable> =>
no numeric value, do nothing

<xsl:variable name="addressFarLeftValue">,th, 4.</xsl:variable> =>
   produce:   <door>1</door>

有什么建议吗?

如果要测试字符串是否包含数值,一种方法是使用“translate”函数删除字符串中的所有数字,如果结果字符串与初始字符串不匹配,则您知道它一定包含数字。如果字符串没有改变,那么它就没有改变

<xsl:choose>
  <xsl:when test="translate($addressFarLeft, '1234567890', '') != $addressFarLeft">
    <door>1</door>
  </xsl:when>
  <xsl:otherwise/>
所以,.1。输出1,但第。不输出任何内容

如果您想提取实际的数字,那么假设字符串中只出现一个数字,您可以这样做

<xsl:value-of 
   select="translate(
      @addressFarLeft, 
      translate(@addressFarLeft, '1234567890', ''), 
      '')" />
那么,第42条。产出42


如果存在多个数字,例如th、42、ab、1,此方法将失败。

如果要测试字符串是否包含数值,一种方法是使用“translate”函数从字符串中删除所有数字,如果结果字符串与初始字符串不匹配,你知道它一定包含一个数字。如果字符串没有改变,那么它就没有改变

<xsl:choose>
  <xsl:when test="translate($addressFarLeft, '1234567890', '') != $addressFarLeft">
    <door>1</door>
  </xsl:when>
  <xsl:otherwise/>
所以,.1。输出1,但第。不输出任何内容

如果您想提取实际的数字,那么假设字符串中只出现一个数字,您可以这样做

<xsl:value-of 
   select="translate(
      @addressFarLeft, 
      translate(@addressFarLeft, '1234567890', ''), 
      '')" />
那么,第42条。产出42

如果存在多个数字,例如th、42、ab、1,则此方法将失败。

可以使用双平移方法获得所需的数值,Michael Kay首先显示:

可以使用双平移方法获得所需的数值,Michael Kay首先展示了该方法:


XPath是您需要检查的版本支持,而不是XSLT。您的意思是XPath是问题的标记?XPath是您需要检查的版本支持,而不是XSLT。您的意思是XPath是问题的标记?对于部分解决方案和问题的主题,这将起作用,或者说确实起作用。仍然需要得到实际的数值这当然是可能的,但是如果你想让人们给出答案,你实际上必须先问这个问题;真的。。。。。在上一个例子中,我犯了一个愚蠢的错误,1应该是4,没有人知道。。。。。。但这一点我可以自己管理。。。。谢谢你的解决方案!!:-对于部分解决方案和问题的主题,这将起作用,或者说确实起作用。仍然需要得到实际的数值这当然是可能的,但是如果你想让人们给出答案,你实际上必须先问这个问题;真的。。。。。在上一个例子中,我犯了一个愚蠢的错误,1应该是4,没有人知道。。。。。。但这一点我可以自己管理。。。。谢谢你的解决方案!!:-