这有效:
<a>apple</a>
node match {
case <a>{contents}</a> => "It's an a: "+ contents
case _ => "It's something else."
}
如何修改此示例,以便它只匹配带有标记“a”且属性id = 2的节点: 如下:
<a id="2">apple</a>
node match {
case <a id="2">{contents}</a> => "It's an a: "+ contents
case _ => "It's something else."
}
但这不会编译。
答案 0 :(得分:3)
这是一种方法:
node match {
case a @ <a>{contents}</a> if (a \ "@id").text == "2" => "It's an a: " + contents
case _ => "It's something else."
}
答案 1 :(得分:3)
还有一种方法,只是为了它。
<a id="2">apple</a> match {
case Node("a", Attribute("id", Text("2"), _), Text(contents)) => contents
}
但不适用于多个属性。
答案 2 :(得分:2)
看起来您需要完整的XPath支持才能编写“a [id ='2']”
之类的查询Scala scales是可用选项之一。
但除了Philippe's answer我可以建议这个查询
import scala.xml.Text
val node = <a id="2">apple</a>
(node \\"a" \"@id").text match {
case "2" => "It's an a: "+ (node \\"a").text
case _ => "It's something else."
}