xml - in regards of finding all nodes that have an attribute that matches a certain value with scala -
i saw following example disccussed here previously, goal return nodes contain attribute id of x contains value y:
    //find nodes attribute "class" contains 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)    i using scala 2.7 , everytime return printed value empty. on ? sorry if copying thread... thought more visible if posted new 1 ?
according node scaladoc, attribute defined follows:
 def attribute(key: string):option[seq[node]]   therefore, should modify code way:
def attributeequals(name: string, value: string)(node: node) =   {       node.attribute(name).filter(_.text==value).isdefined // *text* returns text representation of node  }    but why not achieving same simpler:
scala> (xml descendant_or_self) filter{node => (node \ "@class").text == "test"} res1: list[scala.xml.node] = list(<span class="test">hello</span>, <div class="test"><p>hello</p></div>)      
Comments
Post a Comment