2017-08-09 55 views
0

我有一个问题。
我要先XML:使用XSLT合并xml到xml的嵌套代码

<?xml version = '1.0' encoding = 'UTF-8'?> 
<groups> 
    <group> 
     <number>1</number> 
    </group> 
    <group> 
     <number>2</number> 
    </group> 
    <group> 
     <number>3</number> 
    </group> 
</groups> 

使用XSLT我想这是这样的:

<?xml version = '1.0' encoding = 'UTF-8'?> 
    <groups> 
     <group number="1"/> 
     <group number="2"/> 
     <group number="3"/> 
    </groups> 

,我现在使用XSLT样式表是:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:strip-space elements="*"/> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="groups"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="number"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

但它只删除“组”字段。需要帮忙!
在此先感谢

+1

见:https://www.w3.org/TR/xslt/#creating-attributes和https://www.w3.org/TR/xslt /#属性值的模板。 –

回答

0

您可以用身份开始转变因为在输入节点名称和结构,输出是相当接近。这按原样复制输入XML到输出。

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

的下一步是<number>节点转换为<group>节点的属性。所以创建一个模板来匹配group/number节点。

<xsl:template match="group/number"> 

在这个模板,在注释中,一个<xsl:attribute>将需要加以界定。在这种情况下,由于属性名称与当前节点名称匹配,因此使用{}内的local-name()。属性的值是当前节点的值。

<xsl:attribute name="{local-name()}"> 
    <xsl:value-of select="." /> 
</xsl:attribute> 

下面是将输入XML转换为所需输出的完整XSLT。

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:strip-space elements="*" /> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="group/number"> 
     <xsl:attribute name="{local-name()}"> 
      <xsl:value-of select="." /> 
     </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 

输出

<groups> 
    <group number="1" /> 
    <group number="2" /> 
    <group number="3" /> 
</groups> 
+0

你是最棒的!谢谢你这么清楚的解释! –