我是xslt的新手,请原谅我的任何错误
在xsl程序中,我得到了一个值列表,其变量名为" foo:vars",其中包含颜色值列表。
有一个声明为 matchWith 的变量,它可以包含任何值(不一定存在于foor:var list中)
程序应输出为:
<color_found>
具有匹配值。 <color_not_found>
下面是程序,能够为案例1提供正确的输出,但是我在条件2的条件下失败了。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:foo="http://foo.com" exclude-result-prefixes="foo">
<xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/>
<foo:vars>
<foo:var name="a1">Yellow</foo:var>
<foo:var name="b1">red</foo:var>
<foo:var name="c1">green</foo:var>
<foo:var name="d1">blue</foo:var>
</foo:vars>
<xsl:variable name="matchWith">Yellow</xsl:variable>
<xsl:template match="/">
<xsl:for-each select="document('')/xsl:stylesheet/foo:vars/foo:var">
<xsl:variable name="temp">
<xsl:value-of select="."/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$temp=$matchWith">
<color_found>
<xsl:value-of select="$matchWith"/>
</color_found>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
问题是当您应该直接检查是否存在匹配值时,您正在使用for-each
。
像这样:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foo="http://foo.com" exclude-result-prefixes="foo">
<xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/>
<foo:vars>
<foo:var name="a1">Yellow</foo:var>
<foo:var name="b1">red</foo:var>
<foo:var name="c1">green</foo:var>
<foo:var name="d1">blue</foo:var>
</foo:vars>
<xsl:variable name="matchWith">Yellow</xsl:variable>
<xsl:template match="/">
<xsl:variable name="options"
select="document('')/xsl:stylesheet/foo:vars/foo:var" />
<xsl:variable name="isMatch" select="$matchWith = $options" />
<xsl:element name="color_{ substring('not_', 1, 4 * not($isMatch)) }found">
<xsl:value-of select="$matchWith" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>