Groovy - 合并 XML 节点



我对此非常接近,但它对我不起作用。我有两个 XML 结构

结构为 Items -> Item(1 到多个实例(。

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

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 大小的数组我的节点列表。如何将其返回到 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>
这是将

两个 xml 数据中的 Item 节点合并到一个 xml 中的groovy script

您所需要做的就是选择要从其他 xml 合并项节点的对象并附加这些节点。例如,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 示例数据

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

最新更新