Разбор XML-строки с использованием XSLT - PullRequest
2 голосов
/ 20 декабря 2010

У меня есть XML-документ с TextBlock, который содержит HTML-код.

<TextBlock>
  <h1>This is a header.</h1>
  <p>This is a paragraph.</p>
</TextBlock>

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

<TextBlock>
  &lt;h1&gt;This is a header.&lt;/h1&gt;
  &lt;p&gt;This is a paragraph.&lt;/p&gt;
</TextBlock>

Так что, когдаЯ использую <xsl:value-of select="TextBlock"/>, он отображает всю кодировку на странице.Есть ли способ использовать XSLT для преобразования &lt; в < внутри элемента TextBlock?

1 Ответ

4 голосов
/ 20 декабря 2010
<xsl:value-of select="TextBlock" disable-output-escaping="yes"/>

и результат:

<h1>This is a header.</h1>
<p>This is a paragraph.</p>

У Firefox есть соответствующая ошибка: https://bugzilla.mozilla.org/show_bug.cgi?id=98168,, которая содержит много комментариев и является интересным чтением.сейчас ищу исправление.

РЕДАКТИРОВАТЬ

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="disable-output-escaping.xsl"/> 
    <!-- https://bug98168.bugzilla.mozilla.org/attachment.cgi?id=434081 -->
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/TextBlock">
        <xsl:copy>
            <xsl:call-template name="disable-output-escaping"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

При проверке через Firebug результат выглядит правильно:

<textblock>
    <h1>This is a header.</h1>
    <p>This is a paragraph.</p>
</textblock>
...