I saw the following example on Nabble, where the goal was to return all nodes that contain an attribute with an id of X that contains a value Y:
//find all nodes with an attribute "class" that contains the value "test" val xml = XML.loadString( """<div> <span class="test">hello</span> <div class="test"><p>hello</p></div> </div>""" ) def attributeEquals(name: String, value: String)(node: Node) = { node.attribute(name).filter(_==value).isDefined } val testResults = (xml \\ "_").filter(attributeEquals("class","test")) //prints: ArrayBuffer( //<span class="test">hello</span>, //<div class="test"><p>hello</p></div> //) println("testResults: " + testResults ) As an extension to this how would one do the following: Find all nodes that contain any attribute that contains a value of Y:
//find all nodes with any attribute that contains the value "test" val xml = XML.loadString( """<div> <span class="test">hello</span> <div id="test"><p>hello</p></div> <random any="test"/></div>""" ) //should return: ArrayBuffer( //<span class="test">hello</span>, //<div id="test"><p>hello</p></div>, //<random any="test"/> ) I was thinking I could use a _ like so:
val testResults = (xml \\ "_").filter(attributeEquals("_","test")) But it doesn't work. I know I can use pattern matching, but just wanted to see if I could do some magic with the filtering.
Cheers - Ed