XSLT и Line Feeds - PullRequest
       11

XSLT и Line Feeds

1 голос
/ 07 мая 2009

Я использую XSLT для переформатирования некоторого XML, чтобы (а) превратить элементы в атрибуты и (б) отсортировать все по алфавиту. Это работает, за исключением атрибутов, все в одной строке. Я понимаю, что это обычно предпочтительнее, но в этом случае мне нужно, чтобы каждый атрибут отображался в отдельной строке при открытии файла в Notepad ++ (или как угодно).

Я могу добавить перевод строки в стиле XML с помощью xsl: text, но это не то, что я хочу. Атрибут value-of separator не работает (это в библиотеке XSL .NET). Я хочу 'не-XML' перевод строки, например. то, что редактор, не поддерживающий XML, будет интерпретировать для отображения каждого атрибута в отдельной строке. Есть идеи?

Ответы [ 3 ]

1 голос
/ 07 мая 2009

Я не думаю, что вы можете сделать это с XSLT. То, что вы ищете, это симпатичный принтер для XML. Почему бы вам не обработать вывод XSLT? Я обычно передаю такие вещи через "xmllint --format -", но это не делает нужного вам форматирования. Насколько сложно это сделать? Особенно, если ему нужно только использовать подмножество XML, которое вы используете (это становится проще, если вам не нужны пространства имен и т. Д.).

0 голосов
/ 07 мая 2009

Вы имеете в виду переводы строки между атрибутами или в пределах значений атрибутов? Если последнее, это просто не может быть сделано, из-за требований нормализации атрибута XML :

Это потому, что XML 1.0 требует, чтобы символы новой строки в значениях атрибута были нормализованы в пробелы, но требует, чтобы ссылки на символы новой строки не были нормализованы. Значения атрибута в модели данных представляют значение атрибута после нормализации. Если новая строка, встречающаяся в значении атрибута в дереве, выводилась как символ новой строки, а не как ссылка на символ, то значение атрибута в дереве, созданном путем повторного анализа XML, будет содержать пробел, а не символ новой строки, что будет означать, что дерево неправильно выведен.

0 голосов
/ 07 мая 2009

Непонятно, что вы имеете в виду под «XML» и «не-XML» переводами строк, но это то, что вы хотите:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
      <node>
        <xsl:text>&#010;</xsl:text>
      </node>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...