复制子元素在不同的元素下

时间:2012-11-26 10:32:21

标签: xslt

我有一个xml文件,格式如下

<root>
<entities>
    <entity>
        <entity_name></entity_name>
        <entity_id></entity_id>
    </entity>
    <entity>
        <entity_name></entity_name>
        <entity_id></entity_id>
    </entity>
    <entity>
        <entity_name></entity_name>
        <entity_id></entity_id>
    </entity>
</entities>

我正在尝试使用xslt将其转换为以下xml格式。

<root>
 <entity_name></entity_name>
 <entity_id></entity_id>

 <entity_name></entity_name>
 <entity_id></entity_id>

 <entity_name></entity_name>
 <entity_id></entity_id>

我是XSLT的新手,并且多年来一直试图解决这个问题。 请建议,如果我能得到一些很好的参考资料来学习XSLT,我真的很感激。

1 个答案:

答案 0 :(得分:1)

您可以通过构建标准的XSLT Identity Transform

来实现这一目标
<xsl:template match="@*|node()">
   <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
</xsl:template>

就其本身而言,它只会按原样复制所有元素。因此,您需要做的是添加与实体实体元素匹配的额外模板,但只输出其子项而不实际复制元素本身。

尝试以下XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="entities|entity">
         <xsl:apply-templates />
   </xsl:template>

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

应用于以下XSLT

<root>
   <entities>
      <entity>
         <entity_name/>
         <entity_id/>
      </entity>
      <entity>
         <entity_name/>
         <entity_id/>
      </entity>
      <entity>
         <entity_name/>
         <entity_id/>
      </entity>
   </entities>
</root>

以下是输出

<root>
   <entity_name></entity_name>
   <entity_id></entity_id>
   <entity_name></entity_name>
   <entity_id></entity_id>
   <entity_name></entity_name>
   <entity_id></entity_id>
</root>