我有一个XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<document>
<fruits>
<fruit>
<title>Orange</title>
<description> This is orange</description>
</fruit>
<fruit>
<title>Apple</title>
<description>This is apple</description>
</fruit>
</fruits>
</document>
如果我想要怎么办? 如果title =“Orange” - &gt;
<P name="Orange">true</P>
其他
<P name="Orange">false</P>.
与Apple类似。 我的解决方案是:
<xsl:for-each select="document/fruits/fruit">
<xsl:choose>
<xsl:when test="title='Orange'">
<P name="Orange">true</P>
</xsl:when>
<xsl:otherwise>
<P name="Orange">false</P>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="title='Apple'">
<P name="Apple">true</P>
</xsl:when>
<xsl:otherwise>
<P name="Apple">false</P>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
但我收到了:
<P name="Orange">true</P>
<P name="Apple">false</P>
<P name="Orange">false</P>
<P name="Apple">true</P>
这是重复的两个。有谁知道怎么做?
答案 0 :(得分:0)
如评论中所述,您正在重复每个水果的测试,因此您可以为每个水果获得单独的结果。
如果要测试所有 fruit
节点中是否存在(至少一个)Orange,请使用以下内容:
<xsl:template match="/">
<result>
<xsl:choose>
<xsl:when test="document/fruits/fruit/title='Orange'">
<P name="Orange">true</P>
</xsl:when>
<xsl:otherwise>
<P name="Orange">false</P>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="document/fruits/fruit/title='Apple'">
<P name="Apple">true</P>
</xsl:when>
<xsl:otherwise>
<P name="Apple">false</P>
</xsl:otherwise>
</xsl:choose>
</result>
</xsl:template>
或者很快:
<xsl:template match="/">
<xsl:variable name="fruit" select="document/fruits/fruit" />
<result>
<P name="Orange">
<xsl:value-of select="$fruit/title='Orange'"/>
</P>
<P name="Apple">
<xsl:value-of select="$fruit/title='Apple'"/>
</P>
</result>
</xsl:template>