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