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

у меня есть XML-документ, как:

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

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

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

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

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

asdfasdf<b>asdf</b> 

и

asdfasdf asdf

3 ответов


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

<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"/>

быстрый и грязный способ:

<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>

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

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

XSLT настроен для отображения как ФОРМАТ HTML. Есть ли способ, которым я могу воспользоваться? значение-of / copy-of для отображения точное содержимое без необходимости рендеринга это?

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

asdfasdf<b>asdf</b>

и

asdfasdf asdf

ответ @Nick-Jones приходит ближе всего к тому, что ты хочешь.

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