【问题标题】:Converting xml to csv using groovy使用groovy将xml转换为csv
【发布时间】:2018-11-29 23:10:57
【问题描述】:

我正在尝试使用 groovy XmlSlurper().parseText() 将以下 XML 转换为 CSV,但在移动到内部节点时没有打印任何内容。

Xml 文件:

 string input = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<executeQueryInSpaceResponse>
    <executeQueryInSpaceResult>
        <rows>
            <ArrayOfString>
                <string>ABCDEF</string>
                <string>ABC</string>
                <string>DEF</string>
                <string>Shilo</string>
                <string/>
                <string>August</string>
                <string>Georgia</string>
                <string/>
                <string>34566</string>
                <string>Studies </string>
                <string>August</string>
                <string/>
                <string/>
                <string>Clerk</string>
                <string/>
                <string>2016-01-05 00:00:00.000</string>
                <string/>
                <string/>
                <string/>
                <string/>
                <string/>
                <string>Not Qualified</string>
                <string>Unintended Request</string>
                <string>512544989</string>
                <string>marketing</string>
                <string>Interactive</string>
                <string/>
                <string>0</string>
            </ArrayOfString>
            <ArrayOfString>
                <string>ABCDEF</string>
                <string>ABC</string>
                <string>DEF</string>
                <string>Shilo</string>
                <string/>
                <string>August</string>
                <string>Georgia</string>
                <string/>
                <string>34566</string>
                <string>Studies </string>
                <string>August</string>
                <string/>
                <string/>
                <string>Clerk</string>
                <string/>
                <string>2016-01-05 00:00:00.000</string>
                <string/>
                <string/>
                <string/>
                <string/>
                <string/>
                <string>Not Qualified</string>
                <string>Unintended Request</string>
                <string>512544989</string>
                <string>marketing</string>
                <string>Interactive</string>
                <string/>
                <string>0</string>
            </ArrayOfString>
        </rows>
        <columnNames>
            <string>Name</string>
            <string>First Name</string>
            <string>Last Name</string>
            <string>Address Line 1</string>
            <string>Address Line 2</string>
            <string>City</string>
            <string>State</string>
            <string>Country</string>
            <string>Postal Code</string>
            <string>Program</string>
            <string>Campus Name</string>
            <string>Date ASP</string>
            <string>Date LEGACY</string>
            <string>Success 1</string>
            <string>Success 2</string>
            <string>Received Date</string>
            <string>Submitted Date</string>
            <string>Complete Date</string>
            <string>Decision Date</string>
            <string>Registration Date</string>
            <string>FDOC</string>
            <string>Status</string>
            <string>Step</string>
            <string>LeadId</string>
            <string>Source</string>
            <string>Vendor</string>
            <string>Client</string>
            <string>SAVEDEXPRESSION</string>
        </columnNames>
        <displayNames>
            <string>Name</string>
            <string>First Name</string>
            <string>Last Name</string>
            <string>Address Line 1</string>
            <string>Address Line 2</string>
            <string>City</string>
            <string>State</string>
            <string>Country</string>
            <string>Postal Code</string>
            <string>Program</string>
            <string>Campus Name</string>
            <string>Date ASP</string>
            <string>Date LEGACY</string>
            <string>Success 1</string>
            <string>Success 2</string>
            <string>Received Date</string>
            <string>Submitted Date</string>
            <string>Complete Date</string>
            <string>Decision Date</string>
            <string>Registration Date</string>
            <string>FDOC Date</string>
            <string>Status</string>
            <string>Step</string>
            <string>LeadId</string>
            <string>Source</string>
            <string>Vendor</string>
            <string>Client</string>
            <string>SAVEDEXPRESSION</string>
        </displayNames>
        <dataTypes>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>93</int>
            <int>93</int>
            <int>12</int>
            <int>12</int>
            <int>93</int>
            <int>93</int>
            <int>93</int>
            <int>93</int>
            <int>93</int>
            <int>93</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>12</int>
            <int>-5</int>
        </dataTypes>
        <numRowsReturned>10</numRowsReturned>
        <hasMoreRows>false</hasMoreRows>
    </executeQueryInSpaceResult>
</executeQueryInSpaceResponse>"""

Groovy 代码:

content = new XmlSlurper().parseText(input)
println content
println content.executeQueryInSpaceResponse.executeQueryInSpaceResult

它没有打印任何东西。预期的输出将是,

预期输出 CSV 文件:

csv 文件的标题应该是:

Name,First Name,Last Name,Address Line 1,Address Line 2,City,State,Country,Postal Code,Program,Campus Name,Date ASP,Date LEGACY,Success 1,Success 2,Received Date,Submitted Date,Complete Date,Decision Date,Registration Date,FDOC Date,Status,Step,LeadId,Source,Vendor,Client,SAVEDEXPRESSION

而行应该是,

ABCDEF,ABC,DEF,Shilo,,August,Georgia,,34566,Studies,August,,,Clerk,,2016-01-05 00:00:00.000,,,,,,Not Qualified,Unintended Request,512544989,marketing,Interactive,,0
ABCDEF,ABC,DEF,Shilo,,August,Georgia,,34566,Studies,August,,,Clerk,,2016-01-05 00:00:00.000,,,,,,Not Qualified,Unintended Request,512544989,marketing,Interactive,,0

【问题讨论】:

    标签: xml csv groovy xml-parsing export-to-csv


    【解决方案1】:

    您在代码中输入的行将返回 xml 的 root 节点。

    content = new XmlSlurper().parseText(input)

    如果您输入content.executeQueryInSpaceResponse,则不会返回任何内容。因为content 是你的根节点executeQueryInSpaceResponse。两者都是一样的。

    你需要替换如下代码:

    println content.executeQueryInSpaceResult

    我也建议你参考Groovy-XML Parsing。享受编码!

    【讨论】:

      【解决方案2】:

      这里有一个 sn-p 可以帮助你:

      def header = content.executeQueryInSpaceResult.columnNames.children().collect().join(',')
      def csv = content.executeQueryInSpaceResult.rows.children().inject(header){ result, row ->
       [result, row.children().collect().join(',')].join("\n")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2019-02-02
        • 1970-01-01
        • 2017-05-23
        相关资源
        最近更新 更多