如何将声明的字段分配给记录XML

时间:2019-01-09 16:27:48

标签: xml xslt

如何将声明的字段分配给XML中的项目/记录,以便将其导出到简单的CSV文件中

用@name字段手动替换项目/记录@id可以完成工作,但是我正在寻找一个XSLT,它可以帮助我自动重现更改

原始XML示例

<table id="1A" name="TableName" comment="">
 <fields>
    <field id="field1" name="name_of_field1" other_uselessatr="..."/>
    <field id="field2" name="name_of_field2" other_uselessatr="..."/>
    <field id="field3" name="name_of_field3" other_uselessatr="..."/>
 </fields>
 <records count="200">
    <rec num="1">
       <fld id="field1">value1</fld>
       <fld id="field3">value2</fld>
       <fld id="field2">value3</fld>
    </rec>
    <rec num="..."></rec>
 </records>
</table>

所需结果

<rec id="1">
  <name_of_field1>value1</name_of_field1>
  <name_of_field2>value2</name_of_field2>
  <name_of_field3>value3</name_of_field3> 
</rec>
...

1 个答案:

答案 0 :(得分:0)

您可以使用一个键:

  <xsl:key name="field-ref" match="fields/field" use="@id"/>

  <xsl:template match="fld">
      <xsl:element name="{key('field-ref', @id)/@name}">
          <xsl:apply-templates/>
      </xsl:element>
  </xsl:template>
位于https://xsltfiddle.liberty-development.net/ncdD7kP

XSLT 3示例,但是该密钥应与旧版本的XSLT相同,您需要说明身份转换而不是使用xsl:mode,或者您可能想添加更多内容模板来执行其他更改,例如

  <xsl:template match="rec/@num">
      <xsl:attribute name="id" select="."/>
  </xsl:template>

https://xsltfiddle.liberty-development.net/ncdD7kP/1

中完成