如何将声明的字段分配给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>
...
答案 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>
中完成