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

时间:2015-06-01 20:53:54

标签: xml xslt-1.0

我需要创建一个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>

1 个答案:

答案 0 :(得分:0)

如何简单:

<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>