Как изменить мою таблицу стилей XSL, чтобы правильно разрешить возврат каретки - PullRequest
0 голосов
/ 01 сентября 2009

Эй, мне было интересно, знает ли кто-нибудь, как изменить следующую таблицу стилей XSL, чтобы ЛЮБОЙ текст в моем преобразованном XML сохранял возврат каретки и перевод строки (который будет \ r \ n, когда я передаю его в XML) , Я знаю, что должен каким-то образом использовать, но не могу понять, как заставить это работать

<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> <xsl:template match=\"/\"><xsl:apply-templates /></xsl:template><xsl:template match=\"\r\n\"><xsl:text>&#10;</xsl:text></xsl:template><xsl:template match=\"*\"> <xsl:element name=\"{local-name()}\"><xsl:value-of select=\"text()\"/><xsl:apply-templates select=\"*\"/></xsl:element ></xsl:template></xsl:stylesheet>

Ответы [ 5 ]

1 голос
/ 01 сентября 2009

В приведенном выше коде вы не можете применять шаблоны и ожидаете, что этот шаблон будет вызываться:

<xsl:template match="\r\n\"> 
    <xsl:text>&#10;</xsl:text>
</xsl:template>

Если в вашем XML нет узла с именем "\ r \ n", который все равно является недопустимым Я думаю, что вы хотите сделать это явно сделать этот вызов, когда вы хотите возврат каретки:

<xsl:call-template name="crlf"/>

Вот пример шаблона, который может быть вызван:

<xsl:template name="crlf">
    <xsl:text>&#x0D;</xsl:text>
    <xsl:text>&#x0A;</xsl:text>
    <!--consult your system doc for appropriate carriage return coding -->
</xsl:template>
1 голос
/ 01 сентября 2009

Ответы Криса и dkackman находятся на отметке, но нам также нужно слушать W3C время от времени:

XML-анализируемые объекты часто хранятся в компьютерных файлах, которые для редактирования удобство, организованы в строки. Эти строки обычно разделяются некоторая комбинация персонажей возврат каретки (#xD) и перевод строки (#XA).

Это означает, что в вашем XSLT вы можете поэкспериментировать с некоторой комбинацией &#xA; и &#xD;. Помните, что разные операционные системы имеют разные стратегии окончания строки .

0 голосов
/ 01 сентября 2009

Ваш вопрос звучит так, как будто вы хотите управлять форматом выходного XML. Мой совет: просто не надо.

XML - это данные, а не текст. Формат, в котором он находится, должен быть совершенно не связан с вашим приложением. Если это не так, то ваше приложение нуждается в доработке.

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

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

Существует <xsl:output indent="yes" />, который выполняет симпатичную печать (зависит от процессора XSLT), но ваше приложение не должно полагаться на такие вещи.

0 голосов
/ 01 сентября 2009

Не совсем понятно, чего вы пытаетесь достичь, но ...

Любой пробел, который вы абсолютно хотите показать в выходном потоке, который я бы обернул в <xsl:text></xsl:text>

Я бы также настоятельно рекомендовал указать <xsl:output/> для управления форматированием вывода.

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