2017-04-03 81 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。蛋。面对。虽然谢谢! –