Java 如何在GPath中按属性值查找元素?

Java 如何在GPath中按属性值查找元素?,java,xpath,groovy,gpath,Java,Xpath,Groovy,Gpath,GPath中的XPath//div[@id='foo']的替代方法是什么?一般来说,在哪里可以找到此文档?以下是相应的代码片段: def node = new XmlSlurper().parseText(...) def foo = node.depthFirst().findAll { it.name() == 'div' && it.@id == 'foo'} 您可能希望阅读的其他几个链接: 上一张海报为您提供了所需的一切:假设您的文档已被转换为xml,您需要 de

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

以下是相应的代码片段:

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" }
def root=new XmlSlurper().parseText(.toURL().text)
def foundNode=root.'**'。查找{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案例中一样

它是Groovy,而不是GPath。我需要一个GPath表达式。我不太清楚您的意思,因为GPath主要使用groovy语法和以下额外符号:“..”返回父级“,”返回作为深度优先循环的所有子级“*”@”用于访问普通节点访问器的属性。XPath中的
/
意味着我不知道
div
ok的确切路径。然后,上一张海报给出了解决方案:-使用
xml.depthFirst().find{it.name()='div'&&id.@id='foo}
@winstaan74获取具有特定属性名的所有元素的表达式是什么?
xml.**'.findAll{it.@attributeName}
如何通过元素名找到节点的第一个实例,假设有多个?
xml.'**'。找到{it.name()=='elementName'}
,这将是第一个。