body \\ "div"
与“div”代码匹配,body \\ "p"
与“p”代码匹配。
但是,如果我想匹配所有“div”和“p”标签怎么办?是否可以在scala.xml中使用一个表达式?
如果没有,是否有另一种方法可以按照它们出现的顺序迭代文档中的所有“div”和“p”标记?
答案 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")
虽然我必须说我不确定我喜欢方法名称还是使用隐含在这里: - (