0

我正在尝试将属性转换为子元素,即打开以下内容:

<employees companyid="101">
    <record>
        <id>1</id>
        <name>pradeep</name>
        <designation>softeng</designation>
    </record>
    <record>
        <id>2</id>
        <name>som</name>
        <designation>softeng</designation>
    </record>
    <record>
        <id>3</id>
        <name>Javed</name>
        <designation>softeng</designation>
    </record>
</employees>

我想这样改造

<employees>
    <record>

        <id>1</id>
        <name>pradeep</name>
        <designation>softeng</designation>
    </record>
    <record>
        <id>2</id>
        <name>som</name>
        <designation>softeng</designation>
    </record>
    <record>
        <id>3</id>
        <name>Javed</name>
        <designation>softeng</designation>
    </record>
</employees>

它不工作。有什么建议么?

4

2 回答 2

0
<?xml version="1.0" encoding="UTF-8"?>    
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <employees>
            <xsl:copy-of select="employees/*"/> 
        </employees>
    </xsl:template>
</xsl:stylesheet>

假设您的输出是正确的,并且您只想删除 companyid 属性。

于 2013-09-23T13:00:35.913 回答
0

我希望您需要每个级别的<companyid>元素。<record>您可以使用以下内容:

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

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

    <xsl:template match="record">
        <xsl:copy>
            <companyid><xsl:value-of select="ancestor::employees/@companyid"/></companyid>
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

如果您只想让它出现在第一个<record>元素上,您可以更改<xsl:template match="record"><xsl:template match="record[1]">

于 2013-09-23T12:49:46.437 回答