Java 如何在GPath中按属性值查找元素?
GPath中的XPathJava 如何在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
//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'}
,这将是第一个。