1

我需要使用 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 似乎正在工作,但我的问题是:这是正确的方法吗?

谢谢。

4

1 回答 1

3

我会改变

<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>
于 2012-05-30T17:45:36.063 回答