Search code examples
groovyxmlslurper

Groovy: Correct Syntax for XMLSlurper to find elements with a given attribute


Given a HTML file with the structure html -> body -> a bunch of divs what is the correct groovy statement to find all of the divs with a non blank tags attribute?

The following is not working:

def nodes = html.body.div.findAll { it.@tags != null }

because it finds all the nodes.


Solution

  • Try the following (Groovy 1.5.6):

    def doc = """
    <html>
        <body>
            <div tags="1">test1</div>
            <div>test2</div>
            <div tags="">test3</div>
            <div tags="4">test4</div>
        </body>
    </html>
    """
    
    def html = new XmlSlurper().parseText( doc)
    
    html.body.div.findAll { it.@tags.text()}.each { div ->
        println div.text()
    }
    

    This outputs:

    test1
    test4