簡體   English   中英

如何使用 XSL 將 liquibase XML 轉換為 CSV

[英]How to convert liquibase XML into CSV using XSL

以下是生成的 XML:

XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
                  <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.1.xsd"> 
                        <Tester author="Name" id="16384543">
                          <insert tableName="sampletable">
                            <column name="id" valueNumeric="2"/>
                            <column name="name" value="kathy"/>
                            <column name="active" valueBoolean="true"/>
                            <column name="age" valueNumeric="2"/>
                          </insert>
                          <insert tableName="sampletable">
                            <column name="id" valueNumeric="23"/>
                            <column name="name" value="Queen"/>
                            <column name="active" valueBoolean="true"/>
                            <column name="age" valueNumeric="29"/>
                          </insert>
                          <insert tableName="sampletable">
                            <column name="id" valueNumeric="25"/>
                            <column name="name" value="varshan"/>
                            <column name="active" valueBoolean="false"/>
                            <column name="age" valueNumeric="5"/>
                          </insert>
                        </Tester>
                        </databaseChangeLog>
          

我需要將 XML 轉換為 CSV 如下所示: id,name,active,age 2,kathy,TRUE,2 23,Queen,TRUE,29 25,varshan,FALSE,5

要求:這些列屬性將是動態的,並且對於不同的 XML 會有所不同。 有人可以幫忙嗎?

添加到我在這里提供的答案: How to convert XML into CSV using XSL

您需要考慮命名空間。

<?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"
    xmlns:dbc="http://www.liquibase.org/xml/ns/dbchangelog"
    version="1.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <!-- Header -->
    <xsl:apply-templates select="dbc:databaseChangeLog/dbc:Tester/dbc:insert[1]">
      <xsl:with-param name="header">true</xsl:with-param>
    </xsl:apply-templates>
    <!-- Data -->
    <xsl:apply-templates select="dbc:databaseChangeLog/dbc:Tester/dbc:insert"/>
  </xsl:template>
  
  <xsl:template match="dbc:insert">
    <xsl:param name="header"/>
    <xsl:for-each select="dbc:column">
      <!-- For the header take the name attribute, else take the attribute starting with value -->
      <xsl:choose>
        <xsl:when test="$header='true'">
          <xsl:value-of select="@name"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="@*[starts-with(name(),'value')]"/>
        </xsl:otherwise>
      </xsl:choose>
      <!-- Insert comma between values, except for last value insert new line -->
      <xsl:choose>
        <xsl:when test="position()=last()">
          <xsl:text>&#xa;</xsl:text>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>,</xsl:text>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each>
  </xsl:template>
  
</xsl:stylesheet>

看到它在這里工作: https://xsltfiddle.liberty-development.net/aB9NK5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM