对编码的 XML 值应用 XSLT 模板

发布于 2024-11-03 18:54:39 字数 1690 浏览 0 评论 0原文

我有一个 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”元素中的值应用模板,就像我为以下 xslt 中的“dec”元素所做的那样。

<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 的实际输出是:

示例文本:Hello世界
示例文本:Hello 世界

所需的输出是:

示例文本:你好 世界
示例文本:Hello 世界

请帮助我仅使用 XSLT 来转换编码的 xml 值。

提前致谢。

I have a XML document which I need to transform to HTML. XML Content is as follows:

<root>
    <enc>Sample Text : <d>Hello</d> <e>World</e></enc>
    <dec>
        Sample Text : <d>Hello</d> <e>World</e>
    </dec>
</root>

I need to apply a template for the value in "enc" element like I have done for the "dec" element in following 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>

Actual output for the above XSLT is:

Sample Text : <d>Hello</d> <e>World</e>
Sample Text : Hello World

The desired output is:

Sample Text : Hello World
Sample Text : Hello World

Please help me to transform the encoded xml value with the help of XSLT only.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葵雨 2024-11-10 18:54:39

由于内部 XML 已被转义,因此它显示为包含尖括号的单个文本节点,而不是节点树。在使用 XSLT 处理它之前,您需要将其转换为节点树。将 XML-as-angle-brackets 转换为 XML-as-a-tree 的过程称为解析,因此您需要做的就是通过 XML 解析器处理这个内部 XML。 XSLT 中没有标准函数来执行此操作,但通常可以使用处理器特定的扩展来完成:例如 saxon:parse()(如果您在撒克逊语)。

Because the inner XML has been escaped, it is present as a single text node containing angle brackets, rather than as a tree of nodes. Before you can process it using XSLT, you need to turn it into a tree of nodes. The process of converting XML-as-angle-brackets to XML-as-a-tree is called parsing, so what you need to do is to process this inner XML through an XML parser. There's no standard function in XSLT to do this, but it can generally be done using processor specific extensions: for example saxon:parse() if you're in Saxon.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文