2017-04-03 80 views
1

我對此非常接近,但它只是對我而言不起作用。我有兩個XML結構Groovy - 合併XML節點

結構是Items - > Item(1 to many instances)。

我有一個現有的項目,與項目,我想複製項目的第二個副本的所有實例到現有的。

def newMessage = new XmlParser().parseText(newMsg); 
def newItems = newMessage.depthFirst().findAll{it.name() == 'Items'}; 

def existingMessage = new XmlParser().parse(src); //src is a file location 
def existingSettlementItem = existingMessage.depthFirst().findAll{it.name() == 'Items'}; 

這給了我一個預期的大小爲2的數組列表。我可以很好地組合這兩個數組,這會給我一個4個大小的我的節點arrayList。我怎樣才能回到XML?

問候, 克里斯

添加XML實例

<Items> 
    <SItem> 
    <MsgData> 
     <BahElements> 
     <Fr> 
      <Name> 
      <Address> 
       <Value>123 Fake St</Value> 
      </Address> 
      </Name> 
     </Fr> 
     <To> 
     <Name> 
      <Address> 
       <Value>123 Fake St</Value> 
      </Address> 
      </Name> 
     </To> 
     <MsgDefIdr>MSG_DEF_IDR_VALUE</MsgDefIdr> 
     </BahElements> 
    </MsgData> 
    </Item> 
    <Item> 
    <MsgData> 
     <BahElements> 
     <Fr> 
      <Name> 
      <Address> 
       <Value>123 Fake St</Value> 
      </Address> 
      </Name> 
     </Fr> 
     <To> 
     <Name> 
      <Address> 
       <Value>321 Fake St</Value> 
      </Address> 
      </Name> 
     </To> 
     <MsgDefIdr>MSG_DEF_IDR_VALUE</MsgDefIdr> 
     </BahElements> 
    </MsgData> 
    </Items> 
+0

你有''newMsg'和'src'的小例子xml嗎? –

+0

現在加入。消息數據在結構上是相同的。試想想其中的兩個,我想合併所有的Item標籤,從一個到另一個的Items標籤內。 –

+0

@ ChrisO'Brien,請回答一下,看看這是否有幫助? – Rao

回答

1

這裏是一個確實項節點的從兩個XML數據合併到一個XML的groovy script

您只需要從其他xml中選擇要合併項目節點的對象並追加這些節點。 例如,xml2的items需要合併到xml1中?然後使用:xml2Items.collect{ pXml1.Items.appendNode(it)}

而且我相信現在您已經知道如何進行合併,即將xml1項合併到xml2中。

//Create the parsed objects for xml data 
def pXml1 = new XmlSlurper().parseText(xml1) 
def pXml2 = new XmlSlurper().parseText(xml2) 

//Merge the 2nd xml nodes into 1st xml 
pXml2.'**'.findAll{it.name() == 'Item'}.collect{ pXml1.Items.appendNode(it)} 

//Print the whole merged xml 
println groovy.xml.XmlUtil.serialize(pXml1) 

您可以快速地嘗試這個網上Demo與提供

注意,XML樣本數據不是格式良好的XML樣本數據,所以不得不在上面演示改變。

+0

非常感謝。這確實奏效,但我的代碼其實很好。用這段代碼來對它進行分類。我忘了將我的文件寫入器追加爲true。蛋。面對。雖然謝謝! –