Применить шаблон XSLT для закодированного значения XML - PullRequest
4 голосов
/ 26 апреля 2011

У меня есть документ XML, который мне нужно преобразовать в HTML. Содержание XML выглядит следующим образом:

<root>
    <enc>Sample Text : &lt;d&gt;Hello&lt;/d&gt; &lt;e&gt;World&lt;/e&gt;</enc>
    <dec>
        Sample Text : <d>Hello</d> <e>World</e>
    </dec>
</root>

Мне нужно применить шаблон для значения в элементе "enc", как я это сделал для элемента "dec" в следующем xslt.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:template match="root">
        <html>
            <body>      
                <xsl:apply-templates/>      
            </body>
        </html>
    </xsl:template>
    <xsl:template match="dec">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="enc">  
        <xsl:value-of select="." disable-output-escaping="no" />    
        <br/>
    </xsl:template>
    <xsl:template match="d">
        <b>
            <xsl:value-of select="."/>
        </b>
    </xsl:template>
    <xsl:template match="e">
        <i>
            <xsl:value-of select="."/>
        </i>
    </xsl:template>
</xsl:stylesheet>

Фактический результат для вышеуказанного XSLT:

Образец текста: <d>Hello</d> <e>World</e>
Образец текста: Привет Мир

Желаемый результат:

Образец текста: Привет Мир
Образец текста: Привет Мир

Помогите мне преобразовать закодированное значение xml только с помощью XSLT.

Заранее спасибо.

1 Ответ

2 голосов
/ 26 апреля 2011

Поскольку внутренний XML был экранирован, он представлен как отдельный текстовый узел, содержащий угловые скобки, а не как дерево узлов. Прежде чем вы сможете обработать его с помощью XSLT, вам нужно превратить его в дерево узлов. Процесс преобразования XML-as-angle-скобок в XML-as-a-tree называется синтаксическим анализом, поэтому вам нужно обработать этот внутренний XML с помощью анализатора XML. В XSLT нет стандартной функции для этого, но обычно это можно сделать с помощью расширений, специфичных для процессора: например, saxon:parse(), если вы находитесь в Saxon.

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