在XML中插入子节点

问题描述 投票:0回答:1

使用Groovy在XML中的特定插入节点之后需要帮助。通过现有的帖子搜索,更接近但不够

import groovy.xml.*

def x='''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns7:setPlayerInfoRequest xmlns:ns7="http://www.playtech.com/services/player-management">
    <ns7:behaviourType>Create</ns7:behaviourType>
    <ns7:playerDataMap>
        <ns7:currency>${p_currency}</ns7:currency>
    </ns7:playerDataMap>
</ns7:setPlayerInfoRequest>'''

def n = '''<ns7:custom01>custom01</ns7:custom01>'''

def xml=new XmlParser().parseText(x)

def node = new XmlSlurper(false,false).parseText(n)

def nodes = xml.'**'.findAll{ it.name().localPart == 'currency' }

nodes.each{it.parent().appendNode(node)}

XmlUtil.serialize(xml).toString()

结果

<?xml version="1.0" encoding="UTF-8"?><ns7:setPlayerInfoRequest xmlns:ns7="http://www.playtech.com/services/player-management">
  <ns7:behaviourType>Create</ns7:behaviourType>
  <ns7:playerDataMap>
    <ns7:currency>${p_currency}</ns7:currency>
    <custom01/>
  </ns7:playerDataMap>
</ns7:setPlayerInfoRequest>

预期的结果是在父playerDataMap下插入<ns7:custom01>custom01</ns7:custom01>

groovy xml-parsing xmlslurper
1个回答
0
投票
  1. 你使用XmlSlurpernode创建n。但你应该使用XmlParser,因为你已经在上面的线上做了
  2. 您还应该在it.parent().append(node)的线路上使用nodes.each { it.parent().appendNode(node) }

应用这两个更改后,它将按预期工作

© www.soinside.com 2019 - 2024. All rights reserved.