Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mule 使用dataweave 2.0将xml转换为csv_Mule_Dataweave - Fatal编程技术网

Mule 使用dataweave 2.0将xml转换为csv

Mule 使用dataweave 2.0将xml转换为csv,mule,dataweave,Mule,Dataweave,我有一个person.xml <?xml version="1.0" encoding="UTF-8"?> <person> <firstName>First Name</firstName> <lastName>Last Name</lastName> </person 我正在windows 10上使用Anypoint Studio 7.3, 我正在使用一个侦听器,读取(文件)xml 请参见下面的转

我有一个person.xml

<?xml version="1.0" encoding="UTF-8"?>
<person>
    <firstName>First Name</firstName>
    <lastName>Last Name</lastName>
</person
我正在windows 10上使用Anypoint Studio 7.3, 我正在使用一个侦听器,读取(文件)xml

请参见下面的转换消息dw

%dw 2.0
output application/csv separator=",", header=true
--- 
payload
我在执行流时收到以下消息

"Cannot coerce Object { encoding: UTF-8, mediaType: text/xml; charset=UTF-8, mimeType: text/xml, raw: org.mule.weave.v2.el.SeekableCursorStream@2fdc554d } ({person: {firstName: "Shahjahan",lastName: "Ravjee"}} as Object {encoding: "U...) to Array, while writing CSV at payload." evaluating expression: "%dw 2.0
output application/csv separator=",", header=true
--- 
payload
    ".

问题是,正如错误消息所述,您正在尝试将对象转换为数组。这是一个问题,因为要生成CSV,您需要一个数组或一个对象数组

通过将输出设置为
application/dw
,可以查看当前是否正在输出对象或数组

%dw 2.0
output application/dw
---
payload
这将为您提供以下内容,如您所见,这是一个对象:

{
  person: {
    firstName: "First Name",
    lastName: "Last Name"
  }
}
CSV需要一个数组,因此我们需要进行一些转换,以实现以下目标:

[
  {
    firstName: "First Name",
    lastName: "Last Name"
  }
]
如果将以下脚本设置为
输出应用程序/dw
,您将看到它输出上述内容。此时,您可以确保您具有创建CSV(本例中为对象数组)所需的正确格式,因此将其切换回
输出应用程序/CSV
,您应该可以:

%dw 2.0
output application/csv
---
payload pluck($)

问题是,正如错误消息所述,您正在尝试将对象转换为数组。这是一个问题,因为要生成CSV,您需要一个数组或一个对象数组

通过将输出设置为
application/dw
,可以查看当前是否正在输出对象或数组

%dw 2.0
output application/dw
---
payload
这将为您提供以下内容,如您所见,这是一个对象:

{
  person: {
    firstName: "First Name",
    lastName: "Last Name"
  }
}
CSV需要一个数组,因此我们需要进行一些转换,以实现以下目标:

[
  {
    firstName: "First Name",
    lastName: "Last Name"
  }
]
如果将以下脚本设置为
输出应用程序/dw
,您将看到它输出上述内容。此时,您可以确保您具有创建CSV(本例中为对象数组)所需的正确格式,因此将其切换回
输出应用程序/CSV
,您应该可以:

%dw 2.0
output application/csv
---
payload pluck($)

下面的dw似乎很有魅力

  %dw 2.0
    output application/csv headerLineNumber = 0 , header = true
    ---
    [{
        firstName: payload.person.firstName,
        lastName: payload.person.lastName
    }
    ]

下面的dw似乎很有魅力

  %dw 2.0
    output application/csv headerLineNumber = 0 , header = true
    ---
    [{
        firstName: payload.person.firstName,
        lastName: payload.person.lastName
    }
    ]

为了补充,我省略了
header=true
separator=“,”
,因为它们是csv输出和inputHi jerney的默认值,感谢您的快速响应。不幸的是,你的修复对我不起作用。不知道为什么。我将很快将我的代码上传到github,并通过链接将其链接。@jerney我必须在输出前添加一个“%”,在删除后添加一个“”。也许AnypointStudio7更为宽容?您是否使用DW 1.0而不是2.0?我将更新问题。如果您将答案更改为payload.people,它应该是可接受的答案。只需添加,我省略了
header=true
separator=“,”
,因为它们是csv输出和inputHi jerney的默认值,感谢您的快速响应。不幸的是,你的修复对我不起作用。不知道为什么。我将很快将我的代码上传到github,并通过链接将其链接。@jerney我必须在输出前添加一个“%”,在删除后添加一个“”。也许AnypointStudio7更为宽容?您是否使用DW 1.0而不是2.0?我将更新问题。如果您将答案更改为payload.people,那么它应该是可接受的答案。接下来,我想迭代person.xml的所有元素,目前上面的dw(dataweave)只对第一行执行此操作。“有什么想法吗,我该怎么做?”杰尼的解决方案应该行得通。请用您想要使用的实际xml示例编辑您的问题。您要查找的是。*运算符。payload.persons.*person pull($)@utechtzs-在github上查找项目接下来,我想迭代person.xml的所有元素,目前上面的dw(dataweave)只在第一行执行。“有什么想法吗,我该怎么做?”杰尼的解决方案应该行得通。请用您想要使用的实际xml示例编辑您的问题。您要查找的是。*运算符。payload.persons.*person pull($)@utechtzs-在github@utechtzs上查找该项目很抱歉,但我没有看到编辑建议中的
元素来自何处。而带有20MB zip文件的GitHub链接(来自OP的评论)的使用也很有限too@utechtzs抱歉,我看不到编辑建议中的
元素来自何处。带有20MB zip文件的GitHub链接(来自OP的评论)的使用也很有限