2012-03-21 44 views
0

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

尝试改变

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

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

希望帮助

+0

你也可以是一个小更高效的使用一个xsl:如果不是的xsl:选择,但是这是一个小点 – 2012-03-21 21:13:03

2

正如其他人所说,你的主要问题是,你有select="platform"这是找对于不存在的元素/platforms/platform/platform。同样只有一个xsl:whenxsl:choosexsl:if相同。 (使用xsl:when如果你想要一个其他的条件,这xsl:if不提供它是有用的。使用xsl:choose/xsl:when/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> 

输出

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