сохранить пробелы между узлами xsl: sort'd - PullRequest
2 голосов
/ 11 февраля 2009

Я пытаюсь выяснить, как сохранить узлы пробелов между узлами, которые я сортирую. Вот пример.

Введите:

<a>
    <b>
        <c>
            <d>world</d>
        </c>
        <c>
            <d>hello</d>
        </c>
    </b>
    <e>some other stuff</e>
</a>

Желаемый вывод:

<a>
    <b>
        <c>
            <d>hello</d>
        </c>
        <c>
            <d>world</d>
        </c>
    </b>
    <e>some other stuff</e>
</a>

Вот мой xslt:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="a/b">
        <xsl:copy>
            <xsl:apply-templates select="c">
                <xsl:sort select="d"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

И когда я запускаю его через xsltproc, я получаю это:

<a>
    <b><c>
            <d>hello</d>
        </c><c>
            <d>world</d>
        </c></b>
    <e>some other stuff</e>
</a>

Я бы предпочел не проводить его через приборку потом. Идеи?

Ответы [ 2 ]

3 голосов
/ 11 февраля 2009

Вы хотите добавить эти две строки в начало вашей таблицы стилей:

<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>

Первая строка удаляет все пробелы из документа, а вторая отступает для выходных данных.

1 голос
/ 11 февраля 2009

Ваш второй шаблон соответствует всем b, но применяет шаблоны только к элементам c. Содержащиеся текстовые узлы отбрасываются. Вот почему вы не видите пробелов между элементами b и c в выводе.

Вам придется переформатировать дерево, так как текстовые узлы не будут выглядеть красиво после переупорядочения (даже если вам удастся их включить). Решение Эндрюса сделает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...