我想在XSLT中得到这个。这可能吗?
源XML
<Parent>
<Child></Child>
<Child></Child>
<Child></Child>
<Child></Child>
</Parent>
输出XML
<Issue>
<Node1>Something happening here</Node1>
<Node2>Something happening here</Node2>
<Node3><![CDATA[
<Parent>
<Child></Child>
<Child></Child>
<Child></Child>
<Child></Child>
</Parent>
]]>
</Issue>
我希望整个输入xml为<Node3>
这可能吗?
我的XSLT如下所示(Snippet)
<xsl:template match="/">
<xsl:call-template name="Issue"/>
</xsl:template>
<xsl:template name="Issue">
<xsl:call-template name="Node1"/>
<xsl:call-template name="Node2"/>
<xsl:call-template name="Node3"/>
</xsl:template>
....
<xsl:template name="Node3">
<!-- Here as CDATA i want the input xml content-->
</xsl:template>
任何人都可以帮我解决这个问题吗?我正在使用XSLT 1.0
答案 0 :(得分:1)
在XSLT 1.0中,你可以尝试这种肮脏的技术(不能保证工作):
<xsl:template name="Node3">
<Node3>
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
<xsl:copy-of select="/" />
<xsl:text>]]></xsl:text>
</Node3>
</xsl:template>
我说“脏”,因为disable-output-escaping
通常意味着你试图用锤子来驱动螺丝;即你正在使用一种工具,而不是为了服务而设计的。它不能保证工作,特别是如果XSLT处理器无法控制序列化。
你可能能够避免这种肮脏的技术。我首先要问,为什么输出XML应该在CDATA部分? CDATA要求背后几乎肯定有不同的要求(否则CDATA要求是任意的)。
也许真正的要求是你希望输出XML在输出中被转义,因此无论XML解析器读取什么,它都会将其作为文本读取而不是将其解析为树?