Как импортировать изображение на основе значения переменной или значения-результата - PullRequest
0 голосов
/ 22 марта 2012

Я новичок в 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 ]

2 голосов
/ 22 марта 2012

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

Попробуйте изменить

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

до

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

Надеюсь, что поможет

...