【问题标题】:Convert xml to csv and columns need to be in form of rows (pivot)将 xml 转换为 csv 并且列需要以行的形式(枢轴)
【发布时间】: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

【问题讨论】:

    标签: csv xslt xslt-1.0 transpose


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2021-03-12
      • 2014-07-20
      • 1970-01-01
      相关资源
      最近更新 更多