2014-02-06 31 views
1

我有一個XML進入我的Mule過程。我還想增加/修改它的更多值。例如這裏是結構:Mule:使用來自DB的附加信息豐富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的最佳方式是什麼?

回答

0

一種選擇是使用Groovy與XmlSlurper,取決於它是多麼容易遍歷文檔:

//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}) 
+0

感謝安東,你的意思是使用MEL內的groovy?我不熟悉上面提供的代碼的語法。你能解釋它是如何工作的嗎?或者,你認爲做一個XML To對象類型的轉換和修改字段然後再轉換回XML更容易嗎? – insaneyogi

+0

儘管您可能需要檢查一些Groovy語法來執行遍歷,但您可以在Groovy組件中使用腳本。我的例子只是設置第二方Address1元素內容。 XML To Object當然是可能的,但是您需要定義一個匹配傳入XML的對象結構。 –