将 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>&#xa;</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 并且列需要以行的形式(枢轴)的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSLT 将 CSV 文件转换为 XML

将 csv 中对象形式的数据转换为数据透视表

将 Csv DataGridView 转换为 XML Winforms

将 Parquet 转换为 CSV

将 CSV 转换为 XML 文件的 Java lib 或应用程序? [关闭]

使用 Python 或 XSLT 将复杂的 XML 转换为 CSV