0

body \\ "div"匹配“div”标签,并body \\ "p"匹配“p”标签。

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

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

4

1 回答 1

3

如果您查看NodeSeq.scala中的源代码\\,您会发现它实际上只是使用节点的.filterdescendant_or_selfList[Node]label

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

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

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

或者,如果您真的希望它看起来像“内置”功能,您可以使用合适的方法来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")

尽管我必须说我不确定我是否喜欢方法名称或此处使用隐式:-(

于 2014-11-23T03:49:29.150 回答