如何在<xsl:value-of>中使用元素

时间:2018-03-12 16:52:45

标签: html xml xslt

我想用XML构建一个可以包含文本和代码的文件,如下所示:

<root>
    <item>Use the <code>location.href</code> propriety to change the URL.</item>
<item>Something else.</item>
</root>

我想创建一个XSLT文件,将该XML转换为HTML:

<html>
    <body>
        <ul>
            <li>Use the <code>location.href</code> propriety to change the URL.</li>
            <li>Something else.</li>
        </ul>
    </body>
</html>

我尝试使用此XSLT代码,但它超出了忽略<code>标记的HTML。它的内容仍然可见,但标签本身(及其格式)无处可寻。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <html>
    <body>
        <ul>
            <xsl:for-each select="root/item">
                <li><xsl:value-of select="." /></li>
            </xsl:for-each>
        </ul>
    </body>
    </html>
</xsl:template>
</xsl:stylesheet>

我还尝试用<code>替换XML文件&lt;code&gt;,但结果是一样的。

请告诉我该怎么做。

1 个答案:

答案 0 :(得分:1)

您可以使用与<item>匹配的模板,然后使用xsl:copy-of - 复制所有子内容 - 而不是xsl:value-of - 仅复制文本内容。
node()选择所有节点(强调元素和文本节点)。

<xsl:template match="/root">
    <html>
        <body>
            <ul>
                <xsl:apply-templates />
            </ul>
        </body> 
    </html>
</xsl:template>

<xsl:template match="item">
    <li><xsl:copy-of select="node()" /></li>
</xsl:template>

输出符合要求。