XSLT将节点传递给CDATA JS

时间:2010-03-15 18:49:40

标签: javascript xml xslt

我有以下xml

<AAA>
  <BBB>Total</BBB>
</AAA>

使用xsl:copy-of标签使用以下xslt对其进行转换,因为我想使用xml在js中创建xml文档。

<xsl:template match="/">
  <![CDATA[
    function myFunc() {
      xmlStr = ']]><xsl:copy-of select="/"/><![CDATA[';
    }
  ]]>
</xsl:template>

输出看起来像这样

    function myFunc() {
      xmlStr = '<AAA>
  <BBB>Total</BBB>
</AAA>';
    }

JS不喜欢这样,因为缺少以分号结尾的分号。 如何修复我的xsl以获得以下结果:

function myFunc() {
  xmlStr = '<AAA><BBB>Total</BBB></AAA>';
}

我尝试过normalize-space()和translate(),但是他们从xml中剥离了标签。

谢谢!

1 个答案:

答案 0 :(得分:1)

使用xsl:strip-space element

<xsl:strip-space elements="AAA"/>
<xsl:template match="/">
<![CDATA[
  function myFunc() {
    xmlStr = ']]><xsl:copy-of select="AAA"/><![CDATA[';
  }
]]>
</xsl:template>

在复制之前,它将从元素AAA中删除所有空格。但是,您必须注意,因为它将从AAA下的文本节点中删除任何内部间距,因此它有点过分。如果您有一些需要保留空间的元素,请在xsl:preserve-space元素中将它们列为异常。但从你的例子来看,我认为这不会引起关注。