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

时间:2016-06-28 15:58:12

标签: xslt

I, 我是xml / xslt的新手。 需要准备模板来检查标签123,447,786,780的值,如果字符串中存在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>   

2 个答案:

答案 0 :(得分:2)

  

需要准备检查标签值的模板   123,447,786,780,如果字符串中存在447且返回false,则返回true   如果不是

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

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

答案 1 :(得分:1)

我不知道你原来的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>

通过这样的事情,你可以提取你想要的东西,我想。基本上它是一个XPath表达式。