Как найти элемент по значению атрибута в GPath? - PullRequest
20 голосов
/ 11 августа 2011

Что является альтернативой этому XPath //div[@id='foo'] в GPath? В общем, где я могу найти эту документацию?

Ответы [ 4 ]

28 голосов
/ 11 августа 2011

Вот соответствующий фрагмент:

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

Несколько других ссылок, которые вы можете прочитать:

8 голосов
/ 11 августа 2011

Предыдущий постер дал вам все, что нужно: если ваш документ был добавлен в xml, вы хотите, чтобы

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

нашел один результат.Или findAll, чтобы найти все результаты.

2 голосов
/ 24 апреля 2015

Чтобы имитировать выражение // div [@ id = 'foo'], самое близкое, что вы можете сделать с GPath:

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

'**' во многом совпадает с '// 'в вашем XPath.

xml.'**'.div

выдаст все узлы типа div на любом уровне.

При последующей фильтрации с помощью findAll () с данным замыканием вы получите список узлов, как в случае с XPath

1 голос
/ 09 января 2012

что вам нужно это:

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

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

это двойной *, который позволит вам найти его, не зная пути. По крайней мере, так я это делаю.

...