我有一个XML进入我的Mule流程。我还想进一步添加/修改它的值。例如,结构如下:
<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值。我需要提取它&amp;进一步丰富XML与该数据。我可以使用JDBC数据库适配器来获取值。使用检索到的值修改XML的最佳方法是什么?然后进一步处理XML?
答案 0 :(得分: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})
答案 1 :(得分:0)
从Mule中 XML 中提取值的最佳方法是使用 XPATH 。 以下是参考: - https://developer.mulesoft.com/docs/display/current/XPath
如果您想使用检索值修改XML,最好的方法是在Mule流程中使用 XSLT 。参考: - https://developer.mulesoft.com/docs/display/current/XSLT+Transformer < / p>
您还可以在此处查看相关内容: - how to add a node in a xml payload in mule