Mule:使用数据库中的附加信息丰富XML

Mule:使用数据库中的附加信息丰富XML,xml,mule,Xml,Mule,我的Mule进程中有一个XML。我还想添加/修改更多值。例如,以下是结构: <Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:/XML/PO/Outbound/XML/PO.xsd"> <TransactionId>376721</TransactionId> <T

我的Mule进程中有一个XML。我还想添加/修改更多值。例如,以下是结构:

     <Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            xsi:noNamespaceSchemaLocation="C:/XML/PO/Outbound/XML/PO.xsd">   
    <TransactionId>376721</TransactionId> 
   <TransactionDateTime>2014-01-30T00:00:00</TransactionDateTime>                        
   <Parties>   
      <Party>     
             <PartyType>Sold</PartyType>    
             <PartyCode>106246</PartyCode>    
             <FirstName>John</FirstName>   
             <CompanyName>100</CompanyName>    
             <Address1>1916 Quino Street</Address1>     
             <CityName>San Francisco</CityName>  
             <StateOrProvinceCode>CA</StateOrProvinceCode>   
             <PostalCode>94805</PostalCode>   
             <CountryCode>USA</CountryCode>   
             <PhoneNumber>5102333333</PhoneNumber>                             
        </Party>   
        <Party>     
           <PartyType>DC</PartyType>   
           <Address1/>  
           <Address2/>     
           <Address3/> 
           <CityName/>      
           <StateOrProvinceCode/>    
           <PostalCode/>    
           <PhoneNumber/>  
        </Party>  
        <Party>... </Party> 
   </Parties>
   ...
</Order>

现在我在数据库中有了Address1/Address2/Address3值。我需要提取它&用这些数据进一步丰富XML。我可以使用JDBC数据库适配器获取这些值。使用检索到的值修改XML,然后进一步处理XML的最佳方法是什么?

一个选项是使用Groovy,具体取决于遍历文档的容易程度:

//parse
records = new XmlSlurper(false,false).parseText(payload)
//find your address elements and set the data
records.Parties.children().getAt(1).children().find { e -> e.name().equals('Address1') }.replaceBody("My Address")
import groovy.xml.XmlUtil
import groovy.xml.StreamingMarkupBuilder
//rebuild the xml
streamingMarkupBuilder=new StreamingMarkupBuilder()
result = XmlUtil.serialize(streamingMarkupBuilder.bind{mkp.yield records})

在Mule中从XML中提取值的最佳方法是使用XPATH。 以下是参考资料:-

如果您想用检索到的值修改XML,最好的方法是在Mule flow中使用XSLT。。参考资料:-


您也可以在这里看到相关参考资料:-

谢谢Anton,您的意思是在MEL中使用groovy吗?我不熟悉上面提供的代码的语法。你能解释一下它是怎么工作的吗?或者,您认为进行XML到对象的转换&修改字段,然后再转换回XML更容易吗?您可以在Groovy组件中使用该脚本,尽管您可能需要检查一些Groovy语法才能正确地进行遍历。我的示例只是设置第二方Address1元素内容。XML到对象当然是可能的,但是您需要定义一个与传入XML匹配的对象结构。