Groovy XMLSlurper appendNode未看到更改
我在使用XMLSlurper更新XML文档时遇到问题。大多数情况下都是有效的,但在某些情况下,查找并没有找到我刚刚附加的节点。新节点在处理结束时存在,但在添加子节点时没有找到。 我发现了一篇关于XMLSlurper的帖子,上面说要找到新节点需要再次调用parseText和/或StreaMarkupBuilder,请参见下文。真正地这看起来太含糊了,我想我应该核实一下 下面是一段代码片段。即使刚刚添加了节点,查找也不会得到任何子节点Groovy XMLSlurper appendNode未看到更改,groovy,xmlslurper,Groovy,Xmlslurper,我在使用XMLSlurper更新XML文档时遇到问题。大多数情况下都是有效的,但在某些情况下,查找并没有找到我刚刚附加的节点。新节点在处理结束时存在,但在添加子节点时没有找到。 我发现了一篇关于XMLSlurper的帖子,上面说要找到新节点需要再次调用parseText和/或StreaMarkupBuilder,请参见下文。真正地这看起来太含糊了,我想我应该核实一下 下面是一段代码片段。即使刚刚添加了节点,查找也不会得到任何子节点 codeNode.appendNode {
codeNode.appendNode {
'lab:vendorData'() {}
}
vendorNode = codeNode.children().find { it.name() == "vendorData" }
appendNode不直接修改slurped文档。使用StreamingMarkupBuilder写出文档时,会动态应用编辑。
为什么我找不到我的新节点 这就是我要做的。不优雅,但已通过更新问题:
...
codeNode.appendNode {
'lab:vendorData'() {}
}
//-- must re-slurp to see appended node
labDoc = new XmlSlurper().parseText(serializeXml(labDoc))
codeNode = getResultNodeFor( nextResult.getCode() );
vendorNode = codeNode.children().find { it.name() == "vendorData" }
...
def String serializeXml(GPathResult xml){
XmlUtil.serialize(new StreamingMarkupBuilder().bind {
mkp.declareNamespace("lab", "www.myco.com/LabDocument")
mkp.yield labDoc
} )
}您找到的邮件列表帖子是correctmkp.yield xml而不是labDoc?