将 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>&#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