XSL返回XML不变

时间:2008-12-28 19:49:49

标签: xml xslt

我正在寻找一个简单地返回XML的XSL片段。这听起来微不足道,但我似乎无法在网络上的任何地方找到一个例子。有帮助吗?

3 个答案:

答案 0 :(得分:32)

为了复制完整的XML文档,必须有一个与根匹配的模板。这可能是:

<强> <xsl:template match="/">

<强> <xsl:template match="node()">

然后单个复制当前节点(根节点)就足够了:

<xsl:copy-of select =“。”/&gt;

因此,一个完整的转变是:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
      <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

虽然这可能是最简单的转换,但 XSLT程序员使用另一个,广为人知的identity transformationidentity rule

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

共识转换被认为是最基本的XSLT设计模式之一并且如此大量使用,是通过用其他更具体的模板覆盖此模板规则,可以非常轻松地执行各种操作否则将很难。示例是删除具有特定名称或满足某些其他条件的特定(一组)元素,重命名特定元素,更改特定元素的名称空间,创建特定元素的新子项或兄弟,...等。

有关使用身份转换的更多信息和代码段,请查看here

答案 1 :(得分:10)

这是一个常见问题,答案称为identity transform。以下模板将正确复制现有XML。然后添加额外的模板来修改行为(例如删除某些元素,重命名元素或属性等)。

<xsl:template match="@*|node()">
   <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
</xsl:template>

答案 2 :(得分:0)

怎么样:

<xsl:template match ="/">
  <xsl:copy-of select="."/>
</xsl:template>

也许有更简单的方法?