scala节点匹配案例

时间:2012-02-28 14:38:28

标签: scala

这有效:

<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."
}

但这不会编译。

3 个答案:

答案 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."
}