22

//div[@id='foo']GPath中这个 XPath 的替代方法是什么?一般来说,我在哪里可以找到这个文档?

4

4 回答 4

30

这是相应的片段:

def node = new XmlSlurper().parseText(...)
def foo = node.depthFirst().findAll { it.name() == 'div' && it.@id == 'foo'}

您可能想阅读的其他一些链接:

于 2011-08-11T04:55:34.470 回答
9

上一张海报为您提供了所需的一切:假设您的文档已被吞入xml,您想要

def foo = xml.path.to.div.find{it.@id == 'foo'}

找到一个结果。或findAll查找所有结果。

于 2011-08-11T08:53:25.470 回答
3

为了模仿表达式 //div[@id='foo'] ,你可以用 GPath 做的最接近的事情是:

def xml = new XmlParser().parseText(text)
xml.'**'.div.findAll { it.@id=="foo" }

'**' 与 XPath 中的 '//' 几乎相同。

xml.'**'.div

将产生任何级别的所有 div 类型的节点。

稍后使用给定闭包使用 findAll() 进行过滤,您将获得一个节点列表,就像在 XPath 案例中所做的那样

于 2015-04-24T14:58:41.863 回答
1

你需要的是这样的:

def root = new XmlSlurper().parseText(<locOfXmlFileYouAreParsing>.toURL().text)

def foundNode = root.'**'.find{ it.@id == "foo" }

它的双 * 会让你在不知道路径的情况下找到它。至少我是这样做的。

于 2012-01-08T22:20:40.220 回答