body \\ "div"
匹配“div”标签,并body \\ "p"
匹配“p”标签。
但是如果我想匹配所有的“div”和“p”标签怎么办?scala.xml 中的一个表达式可以吗?
如果没有,是否有另一种方法可以按照它们出现的顺序遍历文档中的所有“div”和“p”标签?
如果您查看NodeSeq.scala中的源代码\\
,您会发现它实际上只是使用节点的.filter
descendant_or_self
List[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")
尽管我必须说我不确定我是否喜欢方法名称或此处使用隐式:-(