【问题标题】:scala node match casescala节点匹配案例
【发布时间】:2012-02-29 19:50:04
【问题描述】:

这行得通:

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

但这不会编译。

【问题讨论】:

标签: scala


【解决方案1】:

这是一种方法:

node match {
  case a @ <a>{contents}</a> if (a \ "@id").text == "2" => "It's an a: " + contents
  case _ => "It's something else."
}

【讨论】:

  • 可惜集成的不好。
【解决方案2】:

另一种方式,只是为了它。

<a id="2">apple</a> match {
  case Node("a", Attribute("id", Text("2"), _), Text(contents)) => contents
}

但不适用于多个属性。

【讨论】:

    【解决方案3】:

    看起来您需要完整的 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."
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2017-02-25
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2020-10-04
      相关资源
      最近更新 更多