【问题标题】:Converting csv to xml in groovy在groovy中将csv转换为xml
【发布时间】:2014-12-18 19:29:22
【问题描述】:

我需要将一个csv文件转换成xml格式如下:

输入的csv是

scott,male,26,doctor
ryan,male,20,student
laura,female,30,lawyer

生成的 xml 应该是

<root>
<criteria name="scott" sex = "male" age = "26" profession = "doctor"/>
<criteria name="ryan" sex = "male" age = "20" profession = "student"/>
<criteria name="laura" sex = "female" age = "30" profession = "lawyer"/>
<root/>

如果缺少任何字段,例如职业,则在 csv 中,

laura,female,30

生成的 xml 应该是

<criteria name="laura" sex = "female" age = "30"/>

如果 csv 是:

 laura,female,,lawyer

它产生

<criteria name="laura" sex = "female" age = "" profession = "lawyer"/>

我希望 xml 在哪里

 <criteria name="laura" sex = "female" profession = "lawyer"/>

有人可以帮我写出在 groovy 中执行此操作的代码吗?

我使用的代码是

CommonsMultipartFile multiPartFile=fileList.first()
                params.type = 'text/csv'
                if(CSV_MIME_TYPE.contains(params.type)){
                    InputStream  inputStream= multiPartFile.getInputStream()
                    def writer=new StringWriter()
                    def xmlBuilder= new MarkupBuilder(writer)
                    xmlBuilder.setDoubleQuotes(true)
                    xmlBuilder.root(){  
                        inputStream.eachLine{ line->
                            def a,b,c,d,e,f,g
                            (a,b,c,d) = line.split(',',-1)
                                      criteria(name:a,sex:b,age:c,profession:d)
                        }

【问题讨论】:

    标签: xml csv groovy


    【解决方案1】:

    摆脱空字段的最简单方法是使用另一种映射方法。如果空值不在criteria() 调用的映射中,则不会在那里生成任何内容。所以你可以像这样映射和过滤它们:

    def line = 'laura,female,,lawyer'
    def mapping = ['name', 'sex', 'age', 'profession']
    // use criteria instead of println there
    println([mapping,line.split(',',-1)*.trim()].transpose().findAll{it[1]}.collectEntries())
    //=> [name:laura, sex:female, profession:lawyer]
    

    transpose 将映射中的键与行中的值配对(它只需要每个列表的相同数量,因此在行尾丢失数据是没有问题的);接下来过滤掉所有的 emtpy 值,最后 collectEntries 将它们变成地图

    【讨论】:

      【解决方案2】:

      您的代码按预期工作,但 CSV sn-p laura,female,,lawyer 中有一个额外的逗号,这会导致您的 CSV“解析器”失效。

      您的代码缩写按预期工作,在Groovy web console 中(单击“执行脚本”,然后打开“输出”选项卡 - 如果控制台加载为空,请尝试重新加载)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 2020-06-10
        • 1970-01-01
        • 2013-06-20
        • 2013-10-04
        相关资源
        最近更新 更多