xml, html или xhtml в <xsl: output>: что является лучшим выбором? - PullRequest
8 голосов
/ 15 декабря 2009

По историческим причинам у нас есть смесь

<xsl:output method="xml">

и

<xsl:output method="html">

и

<xsl:output method="xhtml">

внутри включающей иерархии XSL-файлов. Теперь мы хотим провести рефакторинг, чтобы все XSL-файлы использовали один и тот же метод вывода.

В конце концов, мы хотим создать XHTML-вывод, поэтому я думаю, что последний будет лучшим выбором.

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

Редактировать: Я использую XSLT 2.0

Ответы [ 3 ]

8 голосов
/ 15 декабря 2009

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

XML будет сериализован как XML, поэтому выходные данные будут правильно сформированы, но вы можете столкнуться с некоторыми проблемами с браузерами, использующими выходные данные. Маленькие вещи, такие как самозакрывающиеся элементы <script /> и <div />. Чтобы избежать этой проблемы, вам нужно играть в игры, например, добавлять комментарии внутри элемента (например, <script src="someJSFile.js"><!--don't close my script tag --></script>)

Если у вас есть движок XSLT 2.0 и вы хотите получить правильно сформированный HTML-вывод, не беспокоясь о том, как некоторые элементы сериализуются, используйте XHTML.

5 голосов
/ 16 декабря 2009

Я нашел ответ, прочитав спецификацию XSLT 2.0 ( Сериализация XSLT 2.0 и XQuery 1.0 ).

Учитывая пустой экземпляр XHTML элемент, модель содержимого которого не ПУСТО (например, пустой заголовок или абзац) сериализатор НЕ ДОЛЖЕН использовать минимизированная форма. То есть ДОЛЖЕН вывод <p></p> а не <p />.

Учитывая элемент XHTML, содержимое которого модель пуста, сериализатор ДОЛЖЕН использовать минимизированный синтаксис тега, для пример <br />, как альтернатива синтаксис <br></br> разрешен XML дает неопределенные результаты во многих существующие пользовательские агенты. Сериализатор ДОЛЖЕН включать пробел перед трейлинг />, например <br />, <hr /> и <img src="karen.jpg" alt="Karen" />.

Сериализатор НЕ ДОЛЖЕН использовать сущность ссылка &apos;, которая, хотя законно в XML и, следовательно, в XHTML, не определен в HTML и не распознается всеми пользовательскими агентами HTML.

Сериализатору СЛЕДУЕТ выводить пространство имен декларации таким образом, что в соответствии с требованиями XHTML DTD, если это возможно. DTD XHTML 1.0 требуют объявления XMLNS = "http://www.w3.org/1999/xhtml" появляться в элементе HTML, и только на элемент HTML. сериализатор ДОЛЖЕН выводить пространство имен декларации, которые соответствуют узлы пространства имен, присутствующие в результирующее дерево, но оно ДОЛЖНО избегаться вывод избыточного пространства имен объявления об элементах, где DTD сделает их недействительными.

Это означает, что в ответе используется <xsl:output method="xhtml">.

3 голосов
/ 15 декабря 2009

Насколько я знаю, в xslt 1.0 нет директивы method:xhtml для xsl:output.

wc3schools согласен с этим.

Поскольку XHTML - это диалект XML, я бы это использовал.

Если, однако, вы используете xslt 2.0 , вы также можете использовать xhtml, поскольку это то, что вы выводите.

...