1

我想在 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 作为 CDATA<Node3>

这可能吗?

我的 XSLT 如下所示(片段)

    <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

4

1 回答 1

1

在 XSLT 1.0 中,您可以尝试这种肮脏的技术(不保证有效):

<xsl:template name="Node3">
  <Node3>
    <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
    <xsl:copy-of select="/" />
    <xsl:text>]]></xsl:text>
  </Node3>
</xsl:template>

我说“脏”是因为disable-output-escaping通常意味着您正在尝试使用锤子来驱动螺钉;即,您使用工具的目的不是为了服务。它不能保证工作,特别是如果 XSLT 处理器无法控制序列化。

您也许可以避免这种肮脏的技术。我首先要问,为什么输出 XML 应该在 CDATA 部分中?几乎可以肯定 CDATA 要求背后有不同的要求(否则 CDATA 要求是任意的)。

也许真正的要求是您希望输入 XML 在输出中进行转义,以便任何 XML 解析器接下来读取它都会将其作为文本读取,而不是将其解析为树?

归功于:https ://stackoverflow.com/a/1364884/423105

于 2013-04-11T15:43:36.007 回答