1

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

我发现一篇关于 XMLSlurper 的帖子说找到新节点需要再次调用 parseText 和/或 StreaMarkupBuilder(见下文)。真的?!这看起来很笨拙,以至于我想我会在 SO 上进行验证。

这是一个代码片段。即使刚刚添加了节点,“查找”也会得到 NoChildren。

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

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

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

4

1 回答 1

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

}

于 2011-08-12T19:25:33.067 回答