2012-02-06 3 views
3

Я столкнулся с некоторыми своеобразными отличиями в поведении процессоров XSLT. Интересно, в чем причина этого, и есть ли полный обзор, доступный где-то от разницы в процессорах.
Я проверил следующее простое преобразование (с фиктивным входом):Различия в разнице в текстовом выходе XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 
     <xsl:text>1=&#xA;2=&#xD;3=&#xD;&#xA;4=&#xA;&#xD;end</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

Run в XML Spy (v 2011 sp1 x64), выход:

1= 
2= 
3= 
4= 

end 

Во всех случаях, в шестнадцатеричном после =, а на линии после 4= добавлены два символа, 0D и 0A. По-видимому, XML Spy заменяет каждый запрос на &xA; или &xD; полным появлением CR + LF, за исключением случаев, когда CR и LF запрашиваются в этом порядке сразу после друг друга (см. 3 = часть).

Но при запуске в saxon9he, я получаю предупреждение, что я бегу v1.0 таблицу стилей с процессором v2.0, а выход

1= 
2=3= 
4= 
end 

В этом случае все запросы на &xA; являются заменен на 0D 0A (так что CR добавляется перед LF), но запрос для &xD; выводит запрошенный CR, а не дополнительный LF.

Rerunning in XML Spy установка XSLT версии 2.0 дает тот же результат, что и для 1.0, поэтому я предполагаю, что это не другое соглашение в двух версиях XSLT, которое вызывает это.
Скорее всего, это просто разница между инструментами, о которых мы должны знать, но мне интересно, есть ли еще что сказать по этому вопросу.

+0

Если вы выводите файл в таблицу стилей, ожидается вторая версия с одним CR или. ЛФ. –

ответ

5

В спецификации 2.0 указано, что с текстом метода вывода определяется, каким образом будут представлены окончательные строки строк (точнее, «символ новой строки в экземпляре модели данных МОЖЕТ выводиться с использованием любой последовательности символов, которая условно используется для представления строки, заканчивающейся в выбранной системной среде. ").

XSLT 1.0 ничего не говорит (что на самом деле не отличается).

Некоторые реализации могут использовать одну новую строку последовательно, некоторые могут выводить именно то, что вы просили, некоторые могут использовать строку по умолчанию, заканчивающуюся для операционной системы, в которой вы работаете.

+0

Michael, я нашел документ, к которому вы обращались, и добавьте его здесь для справки: [xslt-xquery-serialization] (http://www.w3.org/TR/xslt-xquery-serialization/) – Maestro13

Смежные вопросы