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

Xslt 如何基于变量值或结果值导入图像,xslt,xsl-fo,Xslt,Xsl Fo,我是xsl fo的新手。 在我的问题中有3个同级标记,其中一个具有属性。我必须先打印带有属性的一个,然后打印另外两个。 我的问题是,我的结果没有显示出来,我已经尝试了何时和是否显示。 这是我的密码: <fo:block> <xsl:for-each select="platforms/platform"> <xsl:choose>

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

个人计算机
PS3
X360
我不能按照它们在这里出现的顺序使用它们,因为每组兄弟姐妹的顺序都不同。 我也没有收到任何错误,文档的其余部分显示得非常完美,它们只是不会显示结果

谢谢

试着换衣服

<xsl:value-of select="platform"/>



希望这有帮助

正如其他人所说,您的主要问题是您有
select=“platform”
,它正在寻找一个不存在的元素
/platforms/platform/platform
。另外,只有一个
xsl:when
xsl:choose
xsl:if
相同。(如果需要else条件,使用
xsl:when
非常有用,而
xsl:if
不提供该条件。使用
xsl:choose
/
xsl:when
/
xsl:otherse
),但在这种情况下,您可以使用谓词只选择所需的元素;那么就不需要有条件的

这里有一些代码可以满足您的需要

<?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>

! 也可在
输出

<?xml version="1.0" encoding="utf-8"?>
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">
PS3
! Also available on
PC
X360
</fo:block>

PS3
! 也可在
个人计算机
X360

使用xsl:if而不是xsl:choose也可以提高效率,但这是一个次要问题
<?xml version="1.0" encoding="utf-8"?>
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">
PS3
! Also available on
PC
X360
</fo:block>