XSL-FO добавляет новую строку после каждого узла

У меня есть файл XML с такой структурой:

<parent>
    <node>Text 1</node>
    <node>Text 2</node>
    <node>Text 3</node>
    <node>Text 4</node>
    <node>Text 5</node>
</parent>

Я хочу обработать этот XML с помощью XSL-FO для создания вывода в формате PDF. У меня есть следующий шаблон XSL-FO:

<fo:block>
    <xsl:for-each select="node[position() &lt; last()]">
        <xsl:value-of select="."/>
        <xsl:if test="position() != last()">
            <xsl:text>&#xA;</xsl:text>
        </xsl:if>
    </xsl:for-each>
</fo:block>

Кажется, это плохо работает. Я получаю встроенный вывод вместо каждого узла в своей строке. Как я могу решить эту проблему?

Спасибо!


person skruzic    schedule 24.07.2014    source источник


Ответы (2)


использовать

<fo:block  linefeed-treatment="preserve">
person Joel M. Lamsen    schedule 24.07.2014

У вас был бы лучший контроль над вещами, если бы вы сопоставили элемент узла и создали для них fo:block. Решение, которое у вас есть, заключается в том, чтобы поместить их в строку, другой ответ будет работать, но даст меньший контроль над ними.

Если вы хотите, чтобы каждый был в новой строке (что означает, что вам нужна новая область блока), поместите каждый из них в свой собственный блок.

Это означает, что вы должны сделать где-нибудь в своем XSL:

 <xsl:template match="node">
     <fo:block>
         <xsl:apply-templates/>
     </fo:block>
 </xsl:template>

У вас не должно быть причин использовать value-of select=".". Вышеупомянутое сделает это за вас, и если вы когда-нибудь расширитесь, чтобы иметь что-то внутри элемента узла, тогда у вас все еще все готово.

person Kevin Brown    schedule 24.07.2014