Как заставить javax Transformer выводить HTML (без самозакрывающихся тегов)? - PullRequest
3 голосов
/ 06 мая 2011

Я использую javax.xml.transform.Transformer для преобразования файла XML в файл HTML.Может случиться, что div не будет иметь содержимого, что приводит к выводу Transformer <div/>, что нарушает рендеринг.

Я искал и нашел , что "Вы можете изменить вывод xslt на html вместо xml, чтобы избежать проблемы с самозакрывающимися тегами", но это было для другого инструмента, и у меня остается вопрос: как мнесделать это с javax Transformer?

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Похоже, что вы создаете преобразователь как обычно, а затем используете Transformer.setOutputProperty , чтобы установить для свойства METHOD значение "html"

0 голосов
/ 24 июня 2011

Этот ответ в другой теме , похоже, не работает в моем случае; даже если я укажу <xsl:output method="html"...>, он все равно выдаст <div/> вместо <div></div>.

Я не знаю, сломана ли моя IDE или компилятор (IBM Rational Application Developer), но я использую обходной путь обнаружения пустых узлов и вставки в них одиночных пробелов. Менее чистый, но эффективный ...

0 голосов
/ 06 мая 2011

Способ вывода действительного HTML с помощью XSLT состоит в использовании инструкции <xsl:output> с атрибутом method, установленным в html.

Вот небольшой пример:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <div>
       <xsl:apply-templates select="x/y/z"/>
     </div>
 </xsl:template>

</xsl:stylesheet>

когда это преобразование применяется к следующему документу XML :

<t/>

желаемый результат получается (один и тот же результат получают 8 разных процессоров XSLT, с которыми я работаю):

<div></div>

В случае, если нежелательный вывод происходит только с определенным процессором XSLT, тогда это проблема реализации с этим конкретным процессором и скорее вопросом «xsltprocessors», чем «xslt».

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