0

body \\ "div"「div」タグにbody \\ "p"一致し、「p」タグに一致します。

しかし、「div」タグと「p」タグをすべて一致させたい場合はどうすればよいでしょうか。scala.xml の 1 つの式で可能ですか?

そうでない場合、ドキュメント内のすべての「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 に答える