我有一个大的HTML页面,它存储在一个XSLT变量中,如下所示:
<xsl:variable name="html">
<html>
<head>
<title>Test page</title>
</head>
<body>
<div class="section">
<h1>Title</h1>
<p>Here is some content.</p>
</div>
</body>
</html>
</xsl:variable>
我希望能够使用XSLT将此变量的内容输出为:
<html>
<head>
<title>Test page</title>
</head>
<body>
<div class="section">
<h1>Title</h1>
<p>Here is some content.</p>
</div>
</body>
</html>
有人能指出我正确的方向来构建我的XSLT以实现这个目标吗?
我想做这样的事情,但这显然无效:
<xsl:value-of select="replace($html,'< >"','< >')" />
有什么建议吗?
答案 0 :(得分:2)
由于您在XSLT文件中的变量中包含该内容,因此我假设您可以更改它。在这种情况下,您只需将代码放在 CDATA 部分中:
<xsl:variable name="html"><![CDATA[
<html>
<head>
<title>Test page</title>
</head>
<body>
<div class="section">
<h1>Title</h1>
<p>Here is some content.</p>
</div>
</body>
</html>
]]></xsl:variable>
这将导致整个块被视为一个字符串(而不是被视为XML,转换到它的字符串值)。现在您可以使用它并将其作为字符串打印在任何地方:
<xsl:template match="/">
<body>
<h1>Here is some HTML Code</h1>
<pre>
<xsl:value-of select="$html"/>
</pre>
</body>
</xsl:template>
这是转型的结果:
<body>
<h1>Here is some HTML Code</h1>
<pre>
<html>
<head>
<title>Test page</title>
</head>
<body>
<div class="section">
<h1>Title</h1>
<p>Here is some content.</p>
</div>
</body>
</html>
</pre>
</body>
答案 1 :(得分:2)
使用Evan Lenz样式表xml-to-string.xsl可以实现您的目标。
以下样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="xml-to-string.xsl"/>
<xsl:variable name="html">
<html>
<head>
<title>Test page</title>
</head>
<body>
<div class="section">
<h1>Title</h1>
<p>Here is some content.</p>
</div>
</body>
</html>
</xsl:variable>
<xsl:template match="/">
<xsl:call-template name="xml-to-string">
<xsl:with-param name="node-set"
select="document('')/*/xsl:variable[@name='html']/*"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
产生以下输出:
<html>
<head>
<title>Test page</title>
</head>
<body>
<div class="section">
<h1>Title</h1>
<p>Here is some content.</p>
</div>
</body>
</html>