2012-03-21 1 views
0

Я новичок в xsl-fo. В моей проблеме есть 3 родственных тега, один из которых имеет атрибут. Я должен сначала напечатать тот, у кого есть атрибут, а затем два других. Моя проблема в том, что мои результаты не отображаются, и я пробовал, когда и если. Heres мой код:Как импортировать изображение на основе значения переменной или значения результата

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

и Heres пример братьев и сестер:

<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: выбрать, но это мелочь –

2

Как уже сказал, ваша главная проблема заключается в том, что у вас есть select="platform", который смотрит для элемента /platforms/platform/platform, которого не существует. Также xsl:choose с одним xsl:when - это то же самое, что и xsl: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>