将 xml 转换为 csv 并且列需要以行的形式(枢轴)
Posted
技术标签:
【中文标题】将 xml 转换为 csv 并且列需要以行的形式(枢轴)【英文标题】:Convert xml to csv and columns need to be in form of rows (pivot) 【发布时间】:2020-07-20 22:58:49 【问题描述】:我需要使用 xslt 将列数据转换为 xml 行并在 csv 中生成输出。这是示例 xml:
<?xml version='1.0' encoding='UTF-8'?>
<Report_Entry>
<PERSON>12345</PERSON>
<Emergency_Contacts_group>
<ADDRESS_LINE_1>Solaris, dela rosa</ADDRESS_LINE_1>
<ADDRESS_LINE_2>Solaris, dela rosa_2</ADDRESS_LINE_2>`enter code here`
<ADDRESS_LINE_3>makati</ADDRESS_LINE_3>
<ADDRESS_LINE_4>1229</ADDRESS_LINE_4>
</Emergency_Contacts_group>
</Report_Entry>
预期输出:
Person|Address_LINE_TYPE|ADDRESS_LINE_DATA
12345|ADDRESS_LINE_1|Solaris, dela rosa
12345|ADDRESS_LINE_2|Solaris,dela rosa_2
12345|ADDRESS_LINE_3|makati
12345|ADDRESS_LINE_4|1229
【问题讨论】:
【参考方案1】:你可以这样实现它:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>Person|Address_LINE_TYPE| ADDRESS_LINE_DATA</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[starts-with(name(),'ADDRESS_LINE')]">
<xsl:text>
</xsl:text>
<xsl:value-of select="../../PERSON"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
在这里查看它的工作原理:https://xsltfiddle.liberty-development.net/jxDiMBS
【讨论】:
以上是关于将 xml 转换为 csv 并且列需要以行的形式(枢轴)的主要内容,如果未能解决你的问题,请参考以下文章
将 Csv DataGridView 转换为 XML Winforms