Sie können nichts mit den vorhandenen \
oder \\
Methoden auf NodeSeq
tun. Aber Sie können erweitern NodeSeq mit einer neuen \*
Methode (man beachte das Fehlen oder Leerzeichen), gemäß den pimp-your-Bibliothek Muster:
import xml.{NodeSeq, Elem}
class ChildSelectable(ns: NodeSeq) {
def \* = ns flatMap { _ match {
case e:Elem => e.child
case _ => NodeSeq.Empty
} }
}
implicit def nodeSeqIsChildSelectable(xml: NodeSeq) = new ChildSelectable(xml)
Im REPL ergibt dies dann mich:
scala> val xml = <a><b><c>xxx</c></b></a>
xml: scala.xml.Elem = <a><b><c>xxx</c></b></a>
scala> xml \*
res7: scala.xml.NodeSeq = NodeSeq(<b><c>xxx</c></b>)
scala> xml \ "b" \*
res8: scala.xml.NodeSeq = NodeSeq(<c>xxx</c>)
scala> xml \ "b" \ "c" \*
res9: scala.xml.NodeSeq = NodeSeq(xxx)
Th ist besser als die angenommene Antwort. '_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _' _ Weniger zu pflegender Code, weniger nicht standardisierte Syntax, um den nächsten Typ, der Ihren Code betrachtet, zu verwirren. – rumtscho
überschätzt diesen Awnser nicht. scala-xml ist kaputt. Verwenden Sie etwas wie https://github.com/lihaoyi/scaladags oder https://github.com/chris-twiner/scalesXml –