有人可以举例说明如何在mule中将csv转换为xml吗?

时间:2014-07-07 06:55:36

标签: xml csv mule

我是Mule的新手。

我想做下面的事情

1) Read csv file from local drive
2) Transform to xml
3) Write xml

请帮忙。

2 个答案:

答案 0 :(得分:2)

将CSV转换为XML并将其映射到XML的最简单方法之一是使用Mule Datamapper commit

但是, Datamapper 是Mule 企业版本的一个功能......

其他替代选项是

  1. 使用文件入站端点从本地光盘加载 CSV 文件,

  2. 使用表达式转换器拆分有效负载放入每列,将每列存储在流量变量中,参考: - https://developer.mulesoft.com/docs/display/current/Datamapper+User+Guide+and+Reference

  3. 最后使用 XSLT 创建 XML 有效负载,并将流量变量作为输入.. ref: - How to read CSV file and insert data into PostgreSQL using Mule ESB, Mule Studio

  4. 此外,您还可以参考以下链接: - https://developer.mulesoft.com/docs/display/current/XSLT+Transformer

    http://opendevelopmentnotes.blogspot.in/2013/09/mule-esb-csv-to-xml-conversion.html

答案 1 :(得分:1)

您可以使用Smooks Transformer转换为XML

的Smooks-CSV-CONFIG-XML

<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
                      xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.2.xsd">
    <csv:reader fields="order_no?trim,cust_no?trim,prod_no?trim,amount?trim"
    separator="|" quote="'" skipLines="0" rootElementName="orders" recordElementName="order" indent="true" />

    <resource-config selector="global-parameters">
        <param name="stream.filter.type">SAX</param>
    </resource-config>
</smooks-resource-list>

在您的mule配置

<smooks:transformer
        name="csvToXmlSmooksTransformer"
        configFile="/transforms/smooks-csv-config.xml"
        resultType="STRING"
        reportPath="target/smooks-report/report.html"
        />

然后在java中创建tezt类

package net.pascalalma.mule.test;

import java.io.File;
import java.io.InputStream;
import java.util.Locale;
import java.util.TimeZone;

import org.junit.Test;
import org.mule.DefaultMuleMessage;
import org.mule.api.MuleMessage;
import org.mule.module.client.MuleClient;
import org.mule.tck.FunctionalTestCase;
import org.mule.util.IOUtils;

public class SmooksCsvTest extends FunctionalTestCase
{
    @Override
    protected String getConfigResources() {
        return "config/smooks-csv-config.xml";
    }

    @Test
    public void testSmooks() throws Exception {
        InputStream in = IOUtils.getResourceAsStream("test-order.csv", this.getClass());

        MuleClient client = new MuleClient();
        MuleMessage reply = client.send("vm://test-csv-to-xml",new DefaultMuleMessage(in));

        assertNotNull(reply);
        assertNotNull(reply.getPayload());

        Object payload = reply.getPayload();
        assertTrue("The message payload is not an instance of String", payload instanceof String);
        assertTrue("The report file wasn't created", getReportFile().exists());
    }

    private File getReportFile() {
        return new File("target/smooks-report/report.html");
    }
    private void deleteReportFile() {
        getReportFile().delete();
    }

    /* (non-Javadoc)
     * @see org.mule.tck.AbstractMuleTestCase#doSetUp()
     */
    @Override
    protected void doSetUp() throws Exception {
        super.doSetUp();

        TimeZone.setDefault(TimeZone.getTimeZone("EST"));
        Locale.setDefault(new Locale("en","IE"));
        deleteReportFile();
    }

    /* (non-Javadoc)
     * @see org.mule.tck.AbstractMuleTestCase#doTearDown()
     */
    @Override
    protected void doTearDown() throws Exception {
        super.doTearDown();
        deleteReportFile();
    }
}

上面的输出看起来像这样

<orders>
        <order number="1">
                <order_no>1888852</order_no>
                <cust_no>21625</cust_no>
                <prod_no>02745011</prod_no>
                <amount>31</amount>
        </order>
        <order number="2">
                <order_no>1888853</order_no>
                <cust_no>21625</cust_no>
                <prod_no>02745011</prod_no>
                <amount>71</amount>
        </order>
        <order number="3">
                <order_no>1888854</order_no>
                <cust_no>21625</cust_no>
                <prod_no>02745011</prod_no>
                <amount>3</amount>
        </order>
</orders>

Reference