ule子中的DataWeave转换

时间:2019-12-20 21:29:38

标签: xml mule mule-studio mule-component dataweave

我将以下内容设置为输入有效负载,并且我希望将其输出为结构良好的XML文件,如下所示:我无法控制输入有效负载。我是Mule DataWeave Transformations和Mule的新手。请注意,这些只是所有名称和属性的任意值。到目前为止,我一直在尝试使用Mule提供的pluck()和map()方法,但没有成功。任何朝着正确方向的指针将不胜感激。

输入:

[{head={vars=[subject, instructorCode, instructoreName]}, results={bindings=[{subject={type=uri, value=www.google.com/subject-1-Details}, instructorName={type=literal, value=John Smith}, instructorCode={type=literal, value=JOS}}, {subject={type=uri, value=www.google.com/subject-2-Details}, instructorName{type=literal, value=Jane Smith}, instructorCode={type=literal, value=JAS}}]}},{head={vars=[department, departmentCode, departmentName]}, results={bindings=[{department={type=uri, value=www.google.com/department-1-details}, departmentName={type=literal, value=Computer Science}, departmentCode={type=literal, value=CS}},{department=(type=uri, value=www.google.com/department-2-details}, departmentName={type=literal, value = English}, departmentCode={type=literal, value=EL}}]}}]

输出:

<?xml version="1.0" encoding="UTF-8"?>
<CustomMessage xmlns="knowledge.publish.google.com">
  <CustomKLMessage>
    <CustomMessageHeader>
      <msgId>12353</msgId>
      <requestDateTime<2019-12-20T16:04:19.099-05:00</requestDateTime>
      <requestorID>XYZ123</requestorID>
      <locale>en_US</locale>
    </CustomMessageHeader>
    <elements>
      <element>
        <name>subject</name>
        <values>
          <value>JOS||John Smith</value>
          <value>JAS||Jane Smith</value>
          <value>NIP||Nilay Patel</value>
        </values>
      </element>
      <element>
        <name>department</name>
        <values>
          <value>CS||Computer Science</value>
          <value>EL||English Language</value>
        </values>
      </element>
    </elements>
  </CustomKLMessage>
</CustomMessage>

2 个答案:

答案 0 :(得分:0)

JSON无效,请发布正确的JSON。

如果此错误是由源引起的,则可能需要对python pandas数据进行一些整理才能使其正确格式。祝你好运。

答案 1 :(得分:0)

输入文件绝对不是JSON(没有引号,它使用等号而不是冒号),而且我还怀疑它有错别字(例如“ instructorName {type”不带等号),括号而不是花括号和单词“ instructoreName”)

保存下来,假设您需要按原样进行解析,然后转换为XML。为此,您可以使用以下脚本(更改错字后):

%dw 2.0
output application/xml
// Convert to JSON which is the most similar format
var jsonText = 
    (
        // replace equals with colons 
        (payload replace "=" with ":") 
        // remove spaces between special chars
        replace /([\[\]\{\},:]+)\s+([\[\]\{\},:]+)/ 
            with  (mat,index) -> mat[1] ++ mat[2]
    )
    // wrap values with quotes
    replace /([^\[\]\{\},\=:]+)/ 
        with (mat,index) -> "\"" ++ trim(mat[1]) ++ "\""
// Parse it as JSON
var json = read(jsonText,"application/json")
ns ns0 knowledge.publish.google.com
---
{ ns0#CustomMessage: {
        ns0#CustomKLMessage: {
        ns0#CustomMessageHeader: {
            ns0#msgId: "12353",
            ns0#requestDateTime: "2019-12-20T16:04:19.099-05:00",
            ns0#requestorID: "XYZ123",
            ns0#locale: "en_US"
        },
        ns0#elements: {(json map (item,idx) -> {
            ns0#element: {
            ns0#name: item.head.vars[0],
            ns0#values: {( item.results.bindings map (bind,idx2) ->  {
                ns0#value: bind[(item.head.vars[1])].value ++ "||" ++ (bind[(item.head.vars[2])].value)
            })}
            }})
        }
        }
    }
}