我是xsl-fo的新手。 在我的问题中有3个兄弟标签,其中一个有一个属性。我必须首先打印属性,然后打印另外两个。 我的问题是我的结果没有显示,我已经尝试过,如果。 继承我的代码:
<fo:block>
<xsl:for-each select="platforms/platform">
<xsl:choose>
<xsl:when test="@highestRated">
<xsl:value-of select="platform"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
! Also available on
<xsl:for-each select="platforms/platform">
<xsl:choose>
<xsl:when test="not(@*)">
<xsl:value-of select="platform"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</fo:block>
并且是兄弟姐妹的一个例子:
<platforms>
<platform>PC</platform>
<platform highestRated="true">PS3</platform>
<platform>X360</platform>
</platforms>
我不能按照它们出现的顺序使用它们,因为每组兄弟姐妹的顺序不同。 我也没有错误,文档的其余部分显示完美,他们只是不会显示结果。
谢谢
答案 0 :(得分:2)
正如其他人所说,你的主要问题是你select="platform"
正在寻找一个不存在的元素/platforms/platform/platform
。另外,xsl:choose
只有一个xsl:when
与xsl:if
相同。 (如果您需要xsl:when
未提供的 else 条件,则使用xsl:if
非常有用。使用xsl:choose
/ xsl:when
/ { {1}}相反。)但在这种情况下,您也可以使用谓词仅选择您想要的元素;那么就没有条件了。
以下是一些能够满足您需求的代码。
xsl:otherwise
<强>输出强>
<?xml version="1.0" encoding="UTF-8" ?>
<!-- New document created with EditiX at Wed Mar 21 21:51:52 GMT 2012 -->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:variable name="nl">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<fo:block>
<xsl:value-of select="$nl"/>
<xsl:for-each select="platforms/platform[@highestRated]">
<xsl:value-of select="."/>
<xsl:value-of select="$nl"/>
</xsl:for-each>
<xsl:text>! Also available on</xsl:text>
<xsl:value-of select="$nl"/>
<xsl:for-each select="platforms/platform[not(@highestRated)]">
<xsl:value-of select="."/>
<xsl:value-of select="$nl"/>
</xsl:for-each>
</fo:block>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
尝试更改
<xsl:value-of select="platform"/>
到
<xsl:value-of select="."/>
希望有所帮助