XSLT:XML 第一个属性需要转换为具有第二个属性值的元素
Posted
技术标签:
【中文标题】XSLT:XML 第一个属性需要转换为具有第二个属性值的元素【英文标题】:XSLT: XML first attribute need to be transformed to element with value of second attribute 【发布时间】:2021-01-28 22:48:32 【问题描述】:使用 xslt 1.0,我需要将输入 xml 转换为输出 xml(见下文)。 换句话说,每个具有“Field”和“Value”两个属性的“Data”元素都需要转换为名称为“Field”值和“Value”值的元素。
<?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>
请帮忙
【问题讨论】:
【参考方案1】:你想要<xsl:element name="@Field">
而不是<xsl:element name="@name">
。
【讨论】:
以上是关于XSLT:XML 第一个属性需要转换为具有第二个属性值的元素的主要内容,如果未能解决你的问题,请参考以下文章
Adobe LiveCycle:使用 XSLT 将 XML 转换为 XML