当前位置: 首页 > 知识库问答 >
问题:

在骡子中使用数据编织的 CSV 到 CSV 转换

汪翰墨
2023-03-14

我必须从来自excel的输入数据做第一级标准化。【输入Excel】【1】。

现在输出应类似于[输出文件][2]。我曾尝试将MEL(将方法定义为全局配置)与Dataweave结合使用。在dataweave内部,我尝试调用上面定义的方法作为全局配置。由于生成的文件为空,因此此方法不起作用。有人能提出一个更好的方法或这个方法中的问题吗。下面是代码@Manik:

 <?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw"
    xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">

  <configuration doc:name="Configuration">
     <expression-language>
         <global-functions>
            def getCompanyName(name){
                 if (flowVars.companyList contains name) {
                    return "";
                 }  else {
                    flowVars.companyList.add(name);
                    return name;
                 }
            }
          </global-functions>
     </expression-language>
 </configuration>


  <file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File" readFromDirectory="C:\Users\Desktop\Mule-Doc"/>
    <file:connector name="File1" autoDelete="true" outputAppend="true" streaming="true" validateConnections="true" doc:name="File"/>


    <flow name="csvnormalizationFlow">
         <file:inbound-endpoint path="C:\Users\Desktop\Mule-Doc" connector-ref="File" responseTimeout="10000" doc:name="File"/>
        <set-variable value="#[[]]" variableName="companyList" doc:name="Variable" mimeType="application/csv"/>
        <logger message="The payload is-----------------------#[payload]" level="INFO" doc:name="Logger"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0

%output application/csv header=true
---
payload map {
    CompanyName: getCompanyName($.Company),
    location:$.Location
}]]></dw:set-payload>
        </dw:transform-message>

        <file:outbound-endpoint path="C:\Users\Desktop\Output" outputPattern="test.csv" connector-ref="File1" responseTimeout="10000" doc:name="File"/>
    </flow>
</mule>

共有2个答案

姜磊
2023-03-14

您可以在数据编织表达式中添加一个空处理程序,并检查它是否是没有写入任何内容的有效负载。下面是空句柄的示例。

 (payload.listAllFlightsResponse.*return default [])
卢锋
2023-03-14

完整答案在这里——https://stack overflow . com/a/37123291/5616671

你能在这里发布你的流xml吗?我运行了这段代码,它给出了我期望的输出。

 类似资料:
  • 集合(即“订单”对象列表) . 对于集合中的每个“Order”对象,我需要一个CSV记录。 我需要以下输出。我已经在我的 DataWeave 组件中尝试了多种组合。但无法解决。我面临的问题是,我需要为每个对象提供 CSV 记录。但我得到的是每个“样本值”的记录。请帮助我如何克服这个问题。提前感谢!!

  • 如何在mule dataweave中编写嵌套循环 我有这样的代码, 但它给出的错误,我无法在此添加其他条件。我想在其他部分分配 $ 值

  • 我通常有更多面向代码的问题,但我需要有关CSV数据库的帮助。基本上,我需要将其格式更改为Fname;Lname;email.问题是我有13000行,所有数据都在1列中,分隔符是“;”。我使用了不同的CSV文件编辑器,他们都将数据放在1列中,所以我无法更改这些列的顺序...我无法从原始数据库中重新提取数据。那么有没有解决这个问题的方法,或者我被搞砸了? 所以我从一个CSV文件开始,它有“;”在每行的

  • csv文件可以正确下载,但里面什么都没有。我希望每个新条目在导出之前在不同的行上。不确定为什么数据没有在CSV中注册,我在这一点上没有得到任何错误。谢谢你的帮助。这是一个chrome扩展。 我在下面的相关帖子中尝试了所有不同的答案,但似乎没有一个在CSV中注册我的数据: 我也尝试了以上问题的所有其他可能的答案。我很感激你的帮助!谢谢!!

  • 我有这样的CSV结构 我还有一个json响应 我需要这样的输出