XSLT:如何检查由分隔符“分隔”分隔的标记字符串中是否存在特定字符串&引用;

XSLT:如何检查由分隔符“分隔”分隔的标记字符串中是否存在特定字符串&引用;,xslt,Xslt,我,, 我是xml/xslt新手。 需要准备模板,该模板检查标记123447786780的值,如果字符串中存在447,则返回true;如果不存在,则返回false 我尝试下面的一段代码,但不知何故它不工作 <xsl:template name="tokenize"> <xsl:Param name="text"/> <xsl:Param name="delimiter" select="','"/> <xsl:choose>

我,, 我是xml/xslt新手。 需要准备模板,该模板检查标记123447786780的值,如果字符串中存在447,则返回true;如果不存在,则返回false

我尝试下面的一段代码,但不知何故它不工作

   <xsl:template name="tokenize"> 
  <xsl:Param name="text"/> 
  <xsl:Param name="delimiter" select="','"/> 
   <xsl:choose> 
        <xsl:when test="contains($text, $delimiter)"> 
               <xsl:value-of select="substring-before($text, $delimiter)">true</xsl:when> 
                               <xsl:-Otherwise>false</xsl:-Otherwise> 
         </xsl:choose> 
      </xsl:template>   

真的
假的
需要准备检查标记值的模板 123447786780,如果字符串中存在447,则返回true;如果字符串中存在false,则返回false 如果不是

这不需要模板,只需要一个简单的XPath表达式:

contains(concat(',', $yourstring, ','), ',447,')
需要准备检查标记值的模板 123447786780,如果字符串中存在447,则返回true;如果字符串中存在false,则返回false 如果不是

这不需要模板,只需要一个简单的XPath表达式:

contains(concat(',', $yourstring, ','), ',447,')

我不知道您的原始XML结构,但假设有如下内容:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Test.xsl"?>

<RootNode>
    <SampleNode Value="123,456,789" />
    <SampleNode Value="123,447,789" />
    <SampleNode Value="447,123,789" />
    <SampleNode Value="123,456,447" />
    <SampleNode Value="123,44476,789" />
</RootNode>

以下XSLT转换适用于我:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fn="http://www.w3.org/2005/xpath-functions">

    <xsl:template match="RootNode">
        <html>
            <body>
                <ul>
                    <xsl:apply-templates select="SampleNode" />
                </ul>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="SampleNode">
        <li>
            <xsl:value-of select="@Value" /> contains '447':
            <xsl:choose>
                <xsl:when test="contains(concat(',', @Value, ','), ',447,')">
                    <strong>Yes</strong>
                </xsl:when>
                <xsl:otherwise>
                    No
                </xsl:otherwise>
            </xsl:choose>
        </li>
    </xsl:template>

</xsl:stylesheet>

  • 包含“447”:

  • 我想,有了这样的东西,你就可以提取出你想要的东西。基本上它是一个XPath表达式。

    我不知道您的原始XML结构,但假设有如下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="Test.xsl"?>
    
    <RootNode>
        <SampleNode Value="123,456,789" />
        <SampleNode Value="123,447,789" />
        <SampleNode Value="447,123,789" />
        <SampleNode Value="123,456,447" />
        <SampleNode Value="123,44476,789" />
    </RootNode>
    
    
    
    以下XSLT转换适用于我:

    <?xml version="1.0" encoding="utf-8"?>
    
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fn="http://www.w3.org/2005/xpath-functions">
    
        <xsl:template match="RootNode">
            <html>
                <body>
                    <ul>
                        <xsl:apply-templates select="SampleNode" />
                    </ul>
                </body>
            </html>
        </xsl:template>
    
        <xsl:template match="SampleNode">
            <li>
                <xsl:value-of select="@Value" /> contains '447':
                <xsl:choose>
                    <xsl:when test="contains(concat(',', @Value, ','), ',447,')">
                        <strong>Yes</strong>
                    </xsl:when>
                    <xsl:otherwise>
                        No
                    </xsl:otherwise>
                </xsl:choose>
            </li>
        </xsl:template>
    
    </xsl:stylesheet>
    
    
    
  • 包含“447”:

  • 我想,有了这样的东西,你就可以提取出你想要的东西。基本上,它是一个XPath表达式。

    当字符串为“1239447789”或“1234475789”或“12394475789”时,测试将返回假阳性。您完全正确!谢谢你指出!您文章中的XPath表达式更好。我修改了我的代码示例。当字符串为“1239447789”或“1234475789”或“12394475789”时,您的测试将返回假阳性。您完全正确!谢谢你指出!您文章中的XPath表达式更好。我修改了我的代码示例。