XSLT:XML 第一个属性需要转换为具有第二个属性值的元素

埃夫马加

使用 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

XML / XSLT属性输出

跳过VBS中xml的第二个节点的第一个节点并进行迭代

从一个文件中解析特定的XML属性,并将其附加到另一个文件中,前提是第二个文件中存在另一个属性

使用XSLT转换XML

使用XSLT换行符和第一个值开头的空格将XML转换为CSV

XSLT在另一个元素中设置另一个XML文件的属性值

查找值属性xml xslt

Haskell,找到第二个元素最少的tupel,如果第二个元素具有两个相同值的tuple,则使用第一个元素进行排序

提取R中XML节点的第二个属性(XML包)

使用jQuery的滑块,第一个有效,但第二个无效。需要动态元素

XSLT从XML获取属性值

如何获取xml中的第一个温度高和第二个低温度

阅读PHP5上XML文件的第一个元素+属性和第二个元素+属性

选择数组中的第二个XML元素

XSLT将要插入的XML节点插入第二个样式表

XSLT将所有元素转换为属性,而使一个节点保持原样

如果在第一个XML中设置了属性,则XSLT从第二个XML复制元素

如果第一个XML中不存在第二个XML中的XSLT复制元素

XSLT不转换XML

XSLT for XML到XML的转换

如何使用XSLT中第二个xml输入中的变量修改一个xml输入?

如何使用XSLT将XML元素的第一个属性的值重命名?

需要使用php foreach使用第二个XML创建XML元素和属性

使用php获取XML中属性的第二个值

合并两个对象,但是如果第一个对象已经具有属性,则忽略第二个对象中的属性

XSLT:使用一个键交叉引用第二个键

读取两个 XML 文件并将第二个 XML 附加到第一个 XML 节点

如何编写带有两个参数的 Mybatis XML Mapper(第一个是 List<String>,第二个是 Long)?

如果另一个属性具有使用 XSLT 的特定值,则重命名 xml 属性值