в отношении поиска всех узлов, которые имеют атрибут, который соответствует определенному значению с Scala - PullRequest
3 голосов
/ 29 сентября 2010

Я видел следующий пример, рассмотренный здесь ранее, где целью было вернуть все узлы, которые содержат атрибут с идентификатором X, который содержит значение 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) 

Я использую Scala 2.7 икаждый раз возвращаемое напечатанное значение всегда пусто.Кто-нибудь может помочь в этом?Извините, если я копирую другую ветку ... но подумал, что было бы более заметно, если бы я разместил новую?

1 Ответ

8 голосов
/ 29 сентября 2010

Согласно Node ScalaDoc , attribute определяется следующим образом:

 def attribute(key: String):Option[Seq[Node]]

Поэтому вы должны изменить свой код следующим образом:

def attributeEquals(name: String, value: String)(node: Node) =  
{  
    node.attribute(name).filter(_.text==value).isDefined // *text* returns a text representation of the node 
} 

Но почему бы просто не добиться того же проще:

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>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...