将XML节点替换为节点的另一个实例
我使用groovy来解析XML文件。使用点表示法,我可以接收所需的节点作为实例 对于我的用例,一个节点被克隆、编辑并在编辑结束后替换原始节点 Node对象有一个实现的,它需要一个闭包,包含以下文档: 将当前节点替换为使用生成器样式定义的节点 通过闭包表示法 @参数c使用生成器样式定义新节点的闭包 符号 我的问题是,如何将一个节点实例替换为另一个节点实例? 这就是我现在所做的,当然不起作用:将XML节点替换为节点的另一个实例,xml,groovy,Xml,Groovy,我使用groovy来解析XML文件。使用点表示法,我可以接收所需的节点作为实例 对于我的用例,一个节点被克隆、编辑并在编辑结束后替换原始节点 Node对象有一个实现的,它需要一个闭包,包含以下文档: 将当前节点替换为使用生成器样式定义的节点 通过闭包表示法 @参数c使用生成器样式定义新节点的闭包 符号 我的问题是,如何将一个节点实例替换为另一个节点实例? 这就是我现在所做的,当然不起作用: Node referenceNode Node editedNode referenceNode.repl
Node referenceNode
Node editedNode
referenceNode.replaceNode {
editedNode
}
由于plus()
方法也排除了相同的语法,这对我来说有点困难
这里有一个使用XmlSlurper解决的与的相关问题,我不想这样做:只需使用要替换它的节点调用
replaceNode
:
import groovy.xml.*
def xml = '''
<root>
<user><name>a</name></user>
<user><name>b</name></user>
<user><name>c</name></user>
</root>'''
parser = new XmlParser().parseText(xml)
Node newNode = parser.user[2].clone()
newNode.@something = 'woo'
parser.user[1].replaceNode(newNode)
println XmlUtil.serialize(parser)
导入groovy.xml*
def xml=''
A.
B
C
'''
parser=new XmlParser().parseText(xml)
Node newNode=解析器。用户[2]。克隆()
newNode@something='woo'
parser.user[1].replaceNode(newNode)
println XmlUtil.serialize(解析器)
上面印着:
<?xml version="1.0" encoding="UTF-8"?><root>
<user>
<name>a</name>
</user>
<user something="woo">
<name>c</name>
</user>
<user>
<name>c</name>
</user>
</root>
A.
C
C
我真的觉得自己很愚蠢,因为我没有尝试过这个;)非常感谢您的回复。我明天会测试这个,并给你一个检查作为反馈:)再次感谢!别担心:-)希望我能帮忙!不幸的是,这为我抛出了一个异常没有方法签名:groovy.util.Node.replaceNode()适用于参数类型:(groovy.util.Node)值:[user[attributes={something=woo};value=[name[attributes={};value=[c]\\\\\\\\\\\\]]可能的解决方案:replaceNode(groovy.lang.Closure)
问题可能是我的旧grails版本2.3.11Odd。。。我将在添加时查看…谢谢您的时间。你完全正确。我将把这个答案标记为正确的,因为它在更新版本的groovy中被更正了。现在,我通过在我的服务中实现一个私有助手方法来解决我的问题,该方法主要完成以下任务:replaced.children().toArray().each{replaced.remove(it)}node.children().each{replaced.append(it)}
,并更改属性。