sat*_*ati 1 xml mule anypoint-studio dataweave
在我的Mule流中,我将调用一个存储过程,这将使我的XML响应如下所示
<RESULT xmlns="some_stored_proc:Response">
<ROOT_TAG>
<RESULTSET_1>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>1</hasError>
</ROW>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>1</hasError>
</ROW>
</RESULTSET_1>
<RESULTSET_2>
<ROW>
<A>0.3</A>
<B>0.2</B>
<C>1.1</C>
<hasError>0</hasError>
</ROW>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>0</hasError>
</ROW>
</RESULTSET_2>
<RESULTSET_3>
<ROW>
<A>1.1</A>
<B>2.4</B>
<C>1.8</C>
<hasError>0</hasError>
</ROW>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>0</hasError>
</ROW>
</RESULTSET_3>
</ROOT_TAG>
</RESULT>
Run Code Online (Sandbox Code Playgroud)
现在,在我的数据编织中,我想要做的是通过此XML,并将任何设置为1的XML置于名为ISSUES的根标签下
<ISSUES>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>1</hasError>
</ROW>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>1</hasError>
</ROW>
</ISSUES>
Run Code Online (Sandbox Code Playgroud)
其余的行都像这样在DOCUMENT下
<DOCUMENT>
<ROW>
<A>0.3</A>
<B>0.2</B>
<C>1.1</C>
<hasError>0</hasError>
</ROW>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>0</hasError>
</ROW>
<ROW>
<A>1.1</A>
<B>2.4</B>
<C>1.8</C>
<hasError>0</hasError>
</ROW>
<ROW>
<A>0.1</A>
<B>0.4</B>
<C>1.0</C>
<hasError>0</hasError>
</ROW>
</DOCUMENT>
Run Code Online (Sandbox Code Playgroud)
我不断碰到一个例外。
注意:<RESULTSET_n>根据输入大小和作为数据库存储过程输入的组大小,可以有任意数量的标记。因此,此标记将是动态的。
所以基本上我要做的就是使用groupBy函数将您的文档拆分为有效和无效的文档,然后将每个部分转换为预期的数据结构
%dw 2.0
output application/xml
import * from dw::core::Objects
---
{
RESULT: {(
payload.RESULT.ROOT_TAG
groupBy ((value, key) -> (key as String match /RESULTSET_([0-9]+)/)[1] == "1")
pluck ((value, key, index) ->
key as String match {
case "true" ->
{ ISSUES: {(valueSet(value))}}
case "false" ->
{ DOCUMENT: {(valueSet(value))}}
}
)
)}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |