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