【问题标题】:XMLSlurper appendNode does not see changesXMLSlurper appendNode 没有看到变化
【发布时间】:2011-08-12 18:32:31
【问题描述】:

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

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

这是一个代码 sn-p。即使刚刚添加了节点,“查找”也会得到 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

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

【问题讨论】:

  • 您找到的邮件列表帖子是正确的

标签: groovy xmlslurper


【解决方案1】:

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

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

}

【讨论】:

  • "mkp.yield xml" 而不是 labDoc?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2021-08-16
  • 2018-02-17
  • 2015-04-11
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多