我有一个 XSLT,可以在节点内创建一些 CDATA。
XML:
<test><inner>stuff</inner></test>
XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="test">
<wrapper>
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
<xsl:copy-of select="*"/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</wrapper>
</xsl:template>
</xsl:stylesheet>
这个通过 Saxon 执行的转换返回:
<wrapper><![CDATA[<inner>stuff</inner>]]></wrapper>
我知道我将 XML 包装在 CDATA 中,这有点荒谬。但这是我正在使用的 API 所期望的,所以我别无选择,只能遵循这种模式。
现在我试图将此转换包含在更大的 XProc 管道中:
<p:pipeline xmlns:p="http://www.w3.org/ns/xproc" version="1.0" >
<p:xslt>
<p:input port="stylesheet">
<p:document href="test.xsl" />
</p:input>
</p:xslt>
返回(使用最新版本的葫芦):
<wrapper><![CDATA[<inner>stuff</inner>]]></wrapper>
XProc 似乎不支持 disable-output-escaping 属性。
我继续尝试了一些 XProc 函数,包括 p:unescape-markup 和 p:string-replace 的各种组合,但我找不到不会对我的其余输出产生不利影响的解决方案。
有什么想法我可以尝试下一步吗?