Я увидел следующий пример Nabble, целью которого было вернуть все узлы, содержащие атрибут с идентификатором 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 )
В качестве дополнения к этому, как бы сделать следующее: Найти все узлы, которые содержат любой атрибут, который содержит значение 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"/> )
Я думал, что могу использовать _ так:
val testResults = (xml \\ "_").filter(attributeEquals("_","test"))
Но это не сработает. Я знаю, что могу использовать сопоставление с образцом, но просто хотел посмотреть, могу ли я сделать магию с фильтрацией.
Приветствия - Эд