How to find element by attribute value in GPath?

后端 未结 4 1401
故里飘歌
故里飘歌 2021-02-18 18:35

What is an alternative to this XPath //div[@id=\'foo\'] in GPath? In general, where I can find this documentation?

相关标签:
4条回答
  • 2021-02-18 18:45

    Here is the corresponding snippet:

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

    A few other links you may want to read:

    • GPath documentation
    • Processing XML with Groovy
    0 讨论(0)
  • 2021-02-18 18:47

    what you need is this:

    def root = new XmlSlurper().parseText(<locOfXmlFileYouAreParsing>.toURL().text)
    
    def foundNode = root.'**'.find{ it.@id == "foo" }
    

    its the double * that will let you find it without knowing the path. At least this is how I do it.

    0 讨论(0)
  • 2021-02-18 18:51

    The previous poster gave you all that's required: Assuming your document has been slurped into xml, you want

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

    to find a single result. Or findAll to find all results.

    0 讨论(0)
  • 2021-02-18 18:57

    To mimic the expression //div[@id='foo'] the closest thing you can do with a GPath is:

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

    the '**' is pretty much the same as '//' in your XPath.

    xml.'**'.div
    

    will yield all the nodes of type div at any level.

    Later filtering with findAll() with the given closure you get a list of nodes as you do in the XPath case

    0 讨论(0)
提交回复
热议问题