Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Xml 如何针对每个作用域有条件地限制a中的有效负载';Mulesoft 4中的集合表达式?_Xml_Foreach_Conditional Statements_Dataweave_Mulesoft - Fatal编程技术网

Xml 如何针对每个作用域有条件地限制a中的有效负载';Mulesoft 4中的集合表达式?

Xml 如何针对每个作用域有条件地限制a中的有效负载';Mulesoft 4中的集合表达式?,xml,foreach,conditional-statements,dataweave,mulesoft,Xml,Foreach,Conditional Statements,Dataweave,Mulesoft,在我的有效负载中,我得到了以下XML <colors> <color> <name>red</name> <type>primary</type> </color> <color> <name>orange</name> <type>secondary</type> </col

在我的有效负载中,我得到了以下XML

<colors>
   <color>
      <name>red</name>
      <type>primary</type>
   </color>
   <color>
      <name>orange</name>
      <type>secondary</type>
   </color>
   <color>
      <name>blue</name>
      <type>primary</type>
   </color>
   <color>
      <name>green</name>
      <type>secondary</type>
   </color>
</colors>

在Mulesoft 4中,如何为每个构造一个
,以按类型对集合进行条件化?它对表达式使用DataWeave2.0语法,但我找不到任何缩减集合的示例。我认为我不再需要XPATH了,因为负载应该可以用点表示法寻址,但我可能错了。

您可以执行以下操作来获得类型为主要类型的颜色:

%dw 2.0
output application/xml
---
{
    colors: 
          color: payload.colors.*color filter ($.`type` == "primary") map
          {
              a:$.name
          }.a
}
输出:

<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>red</color>
  <color>blue</color>
</colors>
<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>
    <name>red</name>
    <type>primary</type>
  </color>
  <color>
    <name>blue</name>
    <type>primary</type>
  </color>
</colors>
输出:

<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>red</color>
  <color>blue</color>
</colors>
<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>
    <name>red</name>
    <type>primary</type>
  </color>
  <color>
    <name>blue</name>
    <type>primary</type>
  </color>
</colors>

红色
主要的,重要的
蓝色
主要的,重要的

您可以执行以下操作,仅获取类型为主要颜色的颜色:

%dw 2.0
output application/xml
---
{
    colors: 
          color: payload.colors.*color filter ($.`type` == "primary") map
          {
              a:$.name
          }.a
}
输出:

<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>red</color>
  <color>blue</color>
</colors>
<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>
    <name>red</name>
    <type>primary</type>
  </color>
  <color>
    <name>blue</name>
    <type>primary</type>
  </color>
</colors>
输出:

<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>red</color>
  <color>blue</color>
</colors>
<?xml version='1.0' encoding='UTF-8'?>
<colors>
  <color>
    <name>red</name>
    <type>primary</type>
  </color>
  <color>
    <name>blue</name>
    <type>primary</type>
  </color>
</colors>

红色
主要的,重要的
蓝色
主要的,重要的

您可以在foreach
集合中使用DW脚本,而不是使用XPATH

每个示例:(假设输入负载是XML类型)


如果仅将名称作为集合中的输出:(Add.name)


您可以在foreach
集合中使用DW脚本,而不是使用XPATH

每个示例:(假设输入负载是XML类型)


如果仅将名称作为集合中的输出:(Add.name)



一旦有效负载准备就绪,就可以在for each collection
payload.colors
(以便它获得一个颜色元素数组)…您可能希望在此处输出application/java,以避免在foreach中再次解析XML。这是否代替了对集合使用dataweave表达式?你是说先用另一个单独的转换为每个
做序吗?你可以内联(即在For Each collection定义中使用相同的概念)或为For Each.做序。选择由你自己来做!!!一旦你准备好了有效负载,你就可以在For Each collection
有效负载中进行配置。颜色
(以便它获得一个颜色元素数组)…您可能希望在此处输出application/java,以避免在foreach中再次解析XML。这是否代替了在集合中使用dataweave表达式?您是说先用另一个单独的转换为每个
排序吗?您可以内联执行(即,在为每个集合定义的范围内,使用相同的概念或前言,为每个..进行选择!!!