0

我的输入xml:

  <Root>
     <Element>
         <Record att="a">value</Record>
         <Record att="b">value</Record>
           .
           .
          <Record att="g">value</Record>
          <Record att="h">value</Record>
            .
             .
          <Record att="p">value</Record>
            .
            .
          <Record att="t">value</Record>
              .
              .
          <Record att="w">value</Record>
               .
                .
          <Record att="z">value</Record>
     </Element>
     <Element>
         <Record att="a">value</Record>
         <Record att="b">value</Record>
           .
           .
          <Record att="g">value</Record>
          <Record att="h">value</Record>
            .
             .
          <Record att="p">value</Record>
            .
            .
          <Record att="t">value</Record>
              .
              .
          <Record att="w">value</Record>
               .
                .
          <Record att="z">value</Record>
     </Element>
     .
     .
     .
     .
     .
     .
   </Root>

我尝试的数据编织配置:

   %dw 1.0
   %input payload application/xml
   %output application/csv

  ---
  payload.root.*Element[0].*Record map {
    (id:$.@att) when ($.@att) == "g" or ($.@att) == "t", 
    (type:($.@att) when ($.@att) == "g" or ($.@att) == "t"
  }

o/pi 进入了我的 csv:

  id,type (headers)
  blanklines
  .
  .
  .
  g,g
  .
  .
  .
  .
  t,t
  .
  .

要求很明确。我只需要 Element[0] 的记录。我的 o/p CSV 不应该有任何空行。预期输出应该是:

    id,type
    g,g
    t,t

我仍然无法理解 dataweave 循环的语法和概念。请帮帮我。接受任何更好的解决方案。

4

3 回答 3

1

如果您不使用下标,则它指的是第一个元素。您可以尝试删除下标 [0]

%dw 1.0
%input payload application/xml
%output application/csv 
---
payload.Root.*Element.*Record map {
    (id:$.@att) ,
    (type:$.@att)
} filter 
于 2018-02-21T06:53:25.897 回答
0

您如何访问不在 XML 中的名称属性 (@name)?您应该访问“att”属性对吗?(@att)

您发布了正确的代码和 XML 吗?

好的,这应该为您完成工作。

%dw 1.0
%input payload application/xml
%output application/csv 
---
payload.Root.*Element[0].*Record map {
(id:$.@att) ,
(type:$.@att)
} filter ($.id == "g" or $.type == "t")
于 2015-10-24T08:56:38.277 回答
-1

下面的代码可以正常工作

Weave Code
%dw 1.0
%output application/csv
---
payload.Root.*Element[0].*Record filter (($.@att == 'g') or ($.@att == 't')) map {
    (id : $.@att),
    (type : $.@att)
} 

输出

id,type
g,g
t,t
于 2017-03-04T17:22:37.243 回答