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>
答案 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表达式。