我有一个 XML 文件,其中链接了一个外部 xsl 样式表。该文件看起来有点像这样:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/transform.xsl" type="text/xsl"?>
<test>
<foo />
</test>
我想将未转换的 XML 的整个源代码复制到 <code>
中标签。我可以使用<xsl:copy-of>
复制整个 xml 树,但代码中的 XML 自 <xsl:copy-of>
起在浏览器中不可见将原始 XML 转换为实际标签而不是转义文本。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<html>
<body>
<code>
<xsl:copy-of select="/"/>
</code>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
预期输出:
<html>
<body>
<code>
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/transform.xsl" type="text/xsl"?>
<test>
<foo />
</test>
</code>
</body>
</html>
这种转变可能吗?
注释:
- 我不关心是否显示 XML 处理指令(例如
<?xml version="1.0" encoding="utf-8"?>
或<?xml-stylesheet href="/xsl/transform.xsl" type="text/xsl"?>
)。 - 我正在寻找 XSLT 解决方案,不建议使用将 XML 作为文本重新插入代码标记内的 javascript。
- 此 XSLT 将由浏览器应用。我不关心浏览器兼容性,如果它至少适用于 Firefox 或 Chrome 之一,那么对我来说就很好。
- 如果代码打印得漂亮或者保留空格会更好,但这是可选的。
最佳答案
使用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:template match="/">
<html>
<body>
<code>
<xsl:call-template name="xml-to-string">
<xsl:with-param name="node-set" select="/"/>
</xsl:call-template>
</code>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
关于xml - XSLT 用于将原始 XML 插入 HTML 代码标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23022320/