我可以告诉scala.xml匹配两个标签中的任何一个吗?

时间:2014-11-23 00:35:26

标签: scala scala-xml

body \\ "div"与“div”代码匹配,body \\ "p"与“p”代码匹配。

但是,如果我想匹配所有“div”和“p”标签怎么办?是否可以在scala.xml中使用一个表达式?

如果没有,是否有另一种方法可以按照它们出现的顺序迭代文档中的所有“div”和“p”标记?

1 个答案:

答案 0 :(得分:3)

如果您查看NodeSeq.scala\\的来源,您可以看到filter操作descendant_or_self真的只是一点点糖}},这是一个List[Node],使用节点' s label

所以你可以自己做同样的事情,匹配标签的 set ,如下所示:

val searchedLabels = Set("p", "div")

val results = body.descendant_or_self.filter(node => searchedLabels.contains(node.label))

或者,如果你真的希望它看起来像是内置的"功能,你可以像{I}那样使用合适的方法来实现scala.xml.Node

class ExtendedNode(n: Node) {

  def \\\(labels: Set[String]): NodeSeq = {
    n.descendant_or_self.filter(node => labels.contains(node.label))
  }
}

implicit def node2extendedNode(n: Node): ExtendedNode = new ExtendedNode(n)

val results = body \\\ Set("p", "div")

虽然我必须说我不确定我喜欢方法名称还是使用隐含在这里: - (