使用xslt从父级复制属性

时间:2012-05-30 17:07:18

标签: xslt

我需要使用XSLT 1.0修改XML。基本上,我需要将属性(名称和值)复制到一个孩子。

这是xml:



    <parent id="3450">
        <son1>
            <name>Malcom</name>
            <age>15</age>
            <description>This is the middle son</description>
        </son1>
        <son2>
            <name>Francis</name>
            <age>19</age>
            <description>This is the oldest son</description>
        </son2>
        <son3>
            <name>Dewey</name>
            <age>9</age>
            <description>This is the youngest son</description>
        </son3>
    </parent>


这应该是结果:



    <parent id="3450">
        <son1 id="3450">
            <name>Malcom</name>
            <age>15</age>
            <description>This is the middle son</description>
        </son1>   
    </parent>


这是我正在使用的XSLT:



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

    <xsl:template match="parent/son1">    
        <xsl:copy>
            <xsl:attribute name="id"><xsl:value-of select="../@id"/></xsl:attribute>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="parent/son2" />
    <xsl:template match="parent/son3" />


XSLT似乎有效,但我的问题是:这是正确的方法吗?

感谢。

1 个答案:

答案 0 :(得分:2)

我会改变

<xsl:template match="parent/son1">    
    <xsl:copy>
        <xsl:attribute name="id"><xsl:value-of select="../@id"/></xsl:attribute>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

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