如何基于变量值或结果值导入图像

时间:2012-03-21 20:31:26

标签: xslt xsl-fo

我是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>

我不能按照它们出现的顺序使用它们,因为每组兄弟姐妹的顺序不同。 我也没有错误,文档的其余部分显示完美,他们只是不会显示结果。

谢谢

2 个答案:

答案 0 :(得分:2)

正如其他人所说,你的主要问题是你select="platform"正在寻找一个不存在的元素/platforms/platform/platform。另外,xsl:choose只有一个xsl:whenxsl: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="."/>

希望有所帮助