Groovy - 合并XML节点

时间:2017-04-03 16:25:52

标签: xml parsing groovy

我对此非常接近,但它不适合我。我有两个XML结构

结构是项目 - >项目(1到多个实例)。

我有一个现有项目,包含项目,我想将所有实例从第二个项目副本复制到现有项目。

<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>

这给了我一个大小为2的数组列表,这是预期的。我可以很好地组合两个数组,这将给我一个4个大小的节点数组。我怎样才能将其恢复为XML?

此致 克里斯

添加了XML示例

import h2o
h2o.init()
df = h2o.import_file("iris_wheader.csv")
pd = df.as_data_frame()
pd['sepal_len'].tolist()

1 个答案:

答案 0 :(得分:2)

这是groovy script,它将两个xml数据中的Item节点合并为一个xml。

您需要的只是选择要从其他xml合并Item节点的对象并附加这些节点。 例如,xml2的项目需要合并到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)

您可以使用提供的xml示例数据快速尝试在线 Demo

请注意,xml示例数据格式不正确,因此在上面的演示中进行了更改。