body \\ "div"
「div」タグにbody \\ "p"
一致し、「p」タグに一致します。
しかし、「div」タグと「p」タグをすべて一致させたい場合はどうすればよいでしょうか。scala.xml の 1 つの式で可能ですか?
そうでない場合、ドキュメント内のすべての「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")
メソッド名またはここでの暗黙の使用のどちらが好きかはわかりませんが:-(