XSLT выводит HTML-теги из XML - PullRequest
       1

XSLT выводит HTML-теги из XML

6 голосов
/ 03 февраля 2011

У меня есть документ XML, похожий на:

<tag>
   <content>adsfasdf<b>asdf</b></content>
</tag>

Я бы хотел, чтобы XSLT выделил элемент содержимого и показал все содержимое:

<xsl:value-of select="/tag/content"/> 

XSLT настроен для рендеринга в формате HTML. Есть ли способ, которым я могу получить значение / копию для отображения точного содержимого без необходимости его рендеринга?

То, что я ищу, это

asdfasdf<b>asdf</b> 

А не:

asdfasdf asdf

Ответы [ 3 ]

10 голосов
/ 03 февраля 2011

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

<xsl:template match="content//*">
    <xsl:value-of select="concat('&lt;',name(),'&gt;')"/>
    <xsl:apply-templates/>
    <xsl:value-of select="concat('&lt;/',name(),'&gt;')"/>
</xsl:template>

, который вы затем можете вызвать:

<xsl:apply-templates select="/tag/content"/>
1 голос
/ 03 февраля 2011

Я бы хотел, чтобы XSLT выбрал элемент контента и показать все содержание:

<xsl:value-of select="/tag/content"/> 

XSLT настроен для рендеринга как HTML. Есть ли способ, которым я могу получить значение / копия для отображения точное содержание без необходимости рендеринга Это?

То, что я ищу, это

asdfasdf<b>asdf</b>

А не:

asdfasdf asdf

Ответ @ Ника-Джонса наиболее близок к тому, что вы хотите.

Взгляните на таблицу стилей XSLT, которая является частью XPath Visualizer , чтобы получить обширный пример того, как можно создать разборное отображение любого документа XML в стиле IE. 1023 *

1 голос
/ 03 февраля 2011

Быстрый и грязный путь:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="content">
        <xsl:copy-of select="text() | *"/>
    </xsl:template>
</xsl:stylesheet>

Результат по вашему образцу будет:

adsfasdf<b>asdf</b>

Другой подход:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="b">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...