使用 XSLT 更改 XML 文件中的字段名称

Changing field name in XML file using XSLT

我需要创建一个 xslt 转换文件,该文件基本上读取 xml 文件并更改字段名称,同时保持相同的字段值,然后输出一个包含这些更改的新 xml 文件。我很难从第二个和第三个字段标签中获取值。这里传入xml:

<?xml version="1.0"?>
<AUTHENTICATOR> 
<LOGINID>johndoe</LOGINID> 
<DATE>20150601</DATE> 
<USERTOKEN>vLk3pRdlQXX1JcO2s1QzAJfU050></USERTOKEN> 
<USERINFO>
<field name="First" value="John"/> 
<field name="Last" value="Doe"/> 
<field name="mail" value="johndoe@hotmail.com"/> 
</USERINFO> 
</AUTHENTICATOR>

我需要 outpur xml 将字段名称设为 'FirstName'、'LastName' 和 'Email',但保留相同的值。这是我的 xslt 文件:

<?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" indent="yes"/>

<xsl:template match="/AUTHENTICATOR">

<AUTHENTICATOR>
<LOGINID><xsl:value-of select="LOGINID"/></LOGINID>
<DATE><xsl:value-of select="DATE"/></DATE>
<USERTOKEN><xsl:value-of select="USERTOKEN"/></USERTOKEN>
<USERINFO>
            <xsl:element name="field">
                <xsl:attribute name="name">FirstName</xsl:attribute>
                <xsl:attribute name="value">
                    <xsl:value-of select="USERINFO/field/@value"/>
                </xsl:attribute>
            </xsl:element>

            <xsl:element name="field">
                <xsl:attribute name="name">LastName</xsl:attribute>
                <xsl:attribute name="value">
                    <xsl:value-of select="USERINFO/field/@value"/>
                </xsl:attribute>
            </xsl:element>

            <xsl:element name="field">
                <xsl:attribute name="name">Email</xsl:attribute>
                <xsl:attribute name="value">
                    <xsl:value-of select="USERINFO/field/@value"/>
                </xsl:attribute>
            </xsl:element>
</USERINFO>
</AUTHENTICATOR>
</xsl:template>
</xsl:stylesheet>

简单的怎么样:

<xsl:template match="/AUTHENTICATOR">
    <xsl:copy>
        <xsl:copy-of select="LOGINID | DATE | USERTOKEN"/>
        <USERINFO>
            <field name="FirstName" value="{USERINFO/field[@name='First']/@value}"/>
            <field name="LastName" value="{USERINFO/field[@name='Last']/@value}"/>
            <field name="Email" value="{USERINFO/field[@name='mail']/@value}"/>
        </USERINFO>
    </xsl:copy>
</xsl:template>