使用Gpath移动节点

时间:2019-01-16 08:09:30

标签: xml groovy gpath

给出数据模型

<outerTag>
    <tagA>
        </tagB>
    </tagA>
    <tagC>
        <interestingContent>
           ...
        </interestingContent>
    </tagC> 
</outerTag>    

我想将<interestingContent>的子节点移到<tagB>中。我不知道移动节点的可能内容,它们也可能有子节点。我目前正在使用GPath,并认为类似这样的简单操作应该有效:

outertag.tagC.childNodes().each { node ->
    outerTag.tagA.tagB.appendNode(node)
}

但是,尽管我能够从节点读取名称和文本,但是appendNode似乎无法解决问题。虽然我可以从理论上读取子级的属性,文本和名称,使用它创建一个新节点,然后追加该节点,但我觉得这是不必要的,特别是因为它需要是一个递归函数,因为节点可以具有子节点自己。

1 个答案:

答案 0 :(得分:0)

您的代码进行了较小的更改

def outerTag = new XmlParser().parseText('''<outerTag>
    <tagA>
        <tagB/>
    </tagA>
    <tagC>
        <interestingContent a="a">1</interestingContent>
        <interestingContent a="b">2</interestingContent>
    </tagC>
</outerTag>''')

outerTag.tagC[0].children().each { child ->
    outerTag.tagA.tagB[0].append(child)
}
//reset value for tagC
outerTag.tagC[0].setValue("")

println groovy.xml.XmlUtil.serialize(outerTag)