简体   繁体   English

Mule 中的 DataWeave 转换

[英]DataWeave Transformation in Mule

I have the following set as my input payload and I want to output to be a well-structured XML-file also as seen below: I have no control over the input payload.我将以下设置作为我的输入负载,并且我希望输出为结构良好的 XML 文件,如下所示:我无法控制输入负载。 I am new to the Mule DataWeave Transformations and Mule in general.我是 Mule DataWeave Transformations 和 Mule 的新手。 Please note these are just arbitrary values for all names and attributes.请注意,这些只是所有名称和属性的任意值。 What I have tried so far is using the pluck () and map () methods provided by Mule, but with no success.到目前为止我尝试过的是使用Mule提供的pluck()和map()方法,但没有成功。 Any pointers in the right direction would be greatly appreciated.任何指向正确方向的指针将不胜感激。

Input:输入:

[{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}}]}}]

Output:输出:

 <?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>

JSON is not valid, please post the correct JSON. JSON 无效,请发布正确的 JSON。

If this error is coming from the source, you may need to do some python pandas data wrangling to get it to the right format.如果此错误来自源头,您可能需要进行一些 python pandas 数据整理以使其成为正确的格式。 Good luck.祝你好运。

The input file is definitely not JSON (it has no quotes, it uses equals instead of colons) and I also suspect it has typos (like "instructorName{type" without equals, a parenthesis instead of a curly brace and the word "instructoreName")输入文件绝对不是 JSON(它没有引号,它使用等号而不是冒号)而且我还怀疑它有拼写错误(例如“instructorName{type”没有等号,括号而不是花括号和单词“instructoreName”) )

Saving this, let's say you need to parse it as it is and then convert to XML.保存它,假设您需要按原样解析它,然后转换为 XML。 For that, you can use the following script (after changing the typos):为此,您可以使用以下脚本(更改错别字后):

%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)
            })}
            }})
        }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM