XMLSlurper appendNode看不到更改

时间:2011-08-12 18:32:31

标签: groovy xmlslurper

我在使用XMLSlurper更新XML文档时遇到了麻烦。大多数事情都有效,但在某些情况下,“find”找不到我刚刚追加的节点(appendNode)。新节点在处理结束时就在那里,但是当我正在添加子节点时找不到它。

我找到一篇关于XMLSlurper的帖子,说找到新的Node需要再次调用parseText和/或StreaMarkupBuilder(见下文)。真?!这看起来很蹩脚,我以为我会在SO上验证。

这是一段代码段。即使刚刚添加了Node,“find”也会获得NoChildren。

    codeNode.appendNode {   
    'lab:vendorData'() {}
}
vendorNode = codeNode.children().find { it.name() == "vendorData" } 
  

“appendNode doea不会直接修改slurped文档。当使用StreamingMarkupBuilder写出文档时,编辑将”动态“应用。”        http://markmail.org/message/5nmxbhwna7hr5zcq#query:related%3A5nmxbhwna7hr5zcq+page:1+mid:bkdesettsnfnieno+state:results

为什么我找不到新的节点?!

1 个答案:

答案 0 :(得分:0)

这就是我的工作。不优雅,但过了“更新”问题:

    ...
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
  } )

}