带有XPath的XSLT-用新的Parent包装子元素



输入:

<s:E1 ...>
    <s:E2 ...>
      <s:Child1 ...>
         <s:EChild1 ...>
         ...
         </s:EChild1 ...>
      </s:Child1 ...>
   </s:E2>
</s:E1 ...>

所需输出为:

<s:E1 ...>
    <s:E2 ...>
      <s:XYZ>
          <s:Child1 ...>
             <s:EChild1 ...>
             ...
             </s:EChild1 ...>
          </s:Child1 ...>
      </s:XYZ>
   </s:E2>
</s:E1 ...>

I。E、 我想用<s:XYZ><s:E2>的属性和子元素包装所有子元素。

我想到的XSLT是:

<xsl:stylesheet version="2.0" ...>
<xsl:output indent="yes"/> 
    <xsl:template match="//*:E2">
      <s:XYZ>
        <xsl:apply-templates/>
      </s:XYZ>
    </xsl:template>
    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

这有效地生成了一个输出,其中<s:XYZ>变成<s:E2>,但不是它的直接子元素。

尝试:

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

最新更新