ノード内に CDATA を作成する XSLT があります。
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>
どちらが返されますか (Calabash の最新バージョンを使用):
<wrapper><![CDATA[<inner>stuff</inner>]]></wrapper>
XProc は disable-output-escaping 属性を尊重していないようです。
p:unescape-markup や p:string-replace のさまざまな組み合わせなど、いくつかの XProc 関数を試してみましたが、残りの出力に悪影響を与えない解決策を見つけることができませんでした。
次に試すアイデアはありますか?