Преобразовать xml в CSV и столбцы должны быть в виде строк (сводная) - PullRequest
0 голосов
/ 08 апреля 2020

Мне нужно преобразовать данные столбца в строку xml с помощью xslt и сгенерировать вывод в 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 Ответ

0 голосов
/ 08 апреля 2020

Вы можете реализовать это так:

<?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

...