Как найти элемент по значению атрибута в GPath?

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

4 ответов


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

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

несколько других ссылок вы можете следующим образом:


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

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

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


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

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

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

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


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

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

"* * "в значительной степени совпадает с" / / " в вашем XPath.

xml.'**'.div

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

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