Scala で XML を Parse する(implicit 編)

以前、Scala で XML を Parse する(添削希望) という記事を書いたところ、ありがたい事に Scala で XML を Parse する ( DSL 編 ) - 国道十六号高架下 というトラックバックを頂いたので、喜び勇んで拝読させて頂いた。
しかし、残念ながら私のスキルでは、難しすぎてサッパリ理解できなかった。そこで、しばらく Scala 勉強会に参加するなどして修行をしてみたので、その成果を披露してみる。

import scala.io.Source
import scala.xml.NodeSeq
import scala.xml.parsing.XhtmlParser

object Test2 {
  implicit def NodeSeqToNodeSeqFilter(nodes: NodeSeq): NodeSeqFilter
    = new NodeSeqFilter(nodes)

  def main(args:Array[String]) = {
    val source = Source.fromFile("/opt/local/share/scala-2.8/doc/scala-devel-docs/api/index.html")
    val xhtml = XhtmlParser(source)
    source.close

    val titles = xhtml \ "body" \\\
      (("div", "id",    "browser")) \\\
      (("div", "id",    "tpl")) \\\
      (("ol",  "class", "packages")) \\\
      (("li",  "class", "pack")) \\\
      (("ol",  "class", "templates"), ("ol", "class", "packages")) \\\
      (("li",  "title"))

    titles foreach println
  }
}

class NodeSeqFilter(nodes: NodeSeq) {
  def \\\(tags: (String, String, String)*): NodeSeq = tags.flatMap {
    case (name, attr, value) => (nodes \ name).filter {
      _.\("@" + attr).text == value
    }
  }

  def \\\(tags: (String, String)*): Seq[String] = tags.flatMap {
    case (name, attr) => (nodes \ name).map {
      _.\("@" + attr).text
    }
  }
}

添削頂いた際に DSL というアイデアを頂いたので、\\\ というのを追加してみたものの、括弧が多くてなんだか微妙。
implicit を禁じ手にして、もう少し粘ってみよ。