将 xml 转换为 csv 并且列需要采用行的形式(枢轴)
Convert xml to csv and columns need to be in form of rows (pivot)
我需要使用 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
你可以这样实现它:
<?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>
我需要使用 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
你可以这样实现它:
<?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>