I would strongly advise not to inherit from a case class. It has surprising effects on equals and hashCode, and has been deprecated in Scala 2.8.
Instead, define x in a trait or an abstract class.
scala> trait A { val x: Int }
defined trait A
scala> case class B(val x: Int, y: Int) extends A
defined class B
http://www.scala-lang.org/node/3289
http://www.scala-lang.org/node/1582
This matches Elems with one child. :)
If you want to match any number of children, replace the last "_" with "_*" . All part of the magic of unapplySeq. :)
<foo id="bar"/> match { // prints "bar"
case n @ <foo/> if (n \ "@id" text) == "bar" => println("bar")
case n @ <foo/> if (n \ "@id" text) == "baz" => println("baz")
}