2012-11-26 78 views
1

下复制子元素我有一个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

您可以通过在标准XSLT形象建设实现这一转变

<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> 
+0

非常感谢添℃。它工作完美:) – Sanjeev