代码之家  ›  专栏  ›  技术社区  ›  Keith Fitzgerald

返回XML不变的XSL

  •  24
  • Keith Fitzgerald  · 技术社区  · 17 年前

    我正在寻找一个简单地返回未更改的XML的XSL代码段。这听起来很琐碎,但我似乎在网上的任何地方都找不到一个例子。有人帮忙吗?

    3 回复  |  直到 15 年前
        1
  •  38
  •   Dimitre Novatchev    17 年前

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

    <xsl:template match="/">

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

    那么,仅复制当前节点(根节点)就足够了:

    <xsl:copy-of 选择“”。”/>

    <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 transformation 或者 identity 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

        2
  •  10
  •   cletus    17 年前

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

    <xsl:template match="@*|node()">
       <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
       </xsl:copy>
    </xsl:template>
    
        3
  •  0
  •   krosenvold    17 年前

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

    也许还有更简单的方法?