使用 xslt 1.0,我需要将输入 xml 转换为输出 xml(见下文)。换句话说,每个具有“字段”和“值”两个属性的“数据”元素都需要转换为名称为“字段”值和“值”值的元素。
<?xml version="1.0" encoding="utf-8"?>
<DataFile>
<DataSet Name="DataSet1">
<Data Field="Id" Value="111"/>
<Data Field="Name" Value="John"/>
<Data Field="ZIP" Value="10000"/>
<Data Field="Phone" Value="0102030405"/>
</DataSet>
<DataSet Name="DataSet2">
<Data Field="Id" Value="222"/>
<Data Field="Name" Value="James"/>
<Data Field="ZIP" Value="10020"/>
</DataSet>
<DataSet Name="DataSet3">
<Data Field="Id" Value="333"/>
<Data Field="Name" Value="Mike"/>
<Data Field="Phone" Value="0607080910"/>
</DataSet>
</DataFile>
我需要输出文件:
<DataFile>
<DataSet Name="DataSet1">
<Id>111</Id>
<Name>John</Name>
<ZIP>10000</ZIP>
<Phone>0102030405</Phone>
</DataSet>
<DataSet Name="DataSet2">
<Id>222</Id>
<Name>James</Name>
<ZIP>10020</ZIP>
</DataSet>
<DataSet Name="DataSet3">
<Id>333</Id>
<Name>Mike</Name>
<Phone>0607080910</Phone>
</DataSet>
</DataFile>
我从类似的示例中尝试 XSLT,但它不起作用(出现类似“无法使用提供的 XML/XSL 输入生成 XML 文档。元素名称无效(空序列)”的错误)。
XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Data">
<xsl:element name="{@name}" >
<xsl:value-of select="@Value"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
请帮忙
而不是<xsl:element name="{@name}">
你想要的<xsl:element name="{@Field}">
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句