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

有人能举例说明如何在mule中将csv转换为xml吗?,xml,csv,mule,Xml,Csv,Mule,我对骡子不熟悉 我想做下面的事情 1) Read csv file from local drive 2) Transform to xml 3) Write xml 请帮助。您可以使用转换器转换为XML smooks csv配置xml <?xml version="1.0" encoding="UTF-8"?> <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"

我对骡子不熟悉

我想做下面的事情

1) Read csv file from local drive
2) Transform to xml
3) Write xml
请帮助。

您可以使用转换器转换为XML

smooks csv配置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>
上面的输出如下所示

<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>

1888852
21625
02745011

将CSV转换和映射为XML的最简单方法之一是使用MuleDatamapper

但是,这个数据映射器是Mule企业版的一个特性

另一种选择是

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

  • 使用表达式转换器将有效负载拆分为每列,将每列存储在流量变量中,参考:-

  • 最后使用XSLT创建XML负载,并将流变量作为输入。。参考:-

  • 此外,您还可以参考以下链接:-

    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>