繁体   English   中英

Mule 中的 DataWeave 转换

[英]DataWeave Transformation in Mule

我将以下设置作为我的输入负载,并且我希望输出为结构良好的 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>

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

如果此错误来自源头,您可能需要进行一些 python pandas 数据整理以使其成为正确的格式。 祝你好运。

输入文件绝对不是 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)
            })}
            }})
        }
        }
    }
}

暂无
暂无

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

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