NodeSeq#\
NodeSeq#\、NodeSeq#\\で遊んでみた。
// XML リテラル var xml:scala.xml.Elem = <kittens type="animal" xmlns="http://kittens.com" xmlns:t="http://tigers.com"> <kitten age="1">mii</kitten> <t:tiger age="2">tora</t:tiger> <kitten age="3">shiro</kitten> <foo> <kitten age="3">kuro</kitten> </foo> </kittens> // ルート直下のkitten要素の値を列挙 // 「\」では直下のノードのみが対象。 // 「\\」で配下の全ノードが探索される。 println("\n---kitten \\") xml \ "kitten" foreach ( k=>println( k.text )) println("\n---kitten \\\\") xml \\ "kitten" foreach ( k=>println( k.text )) println("\n---tiger") xml \ "tiger" foreach ( k=>println( k.text )) // 「\」をつなげて配下を選択できる。XPath風。 println("\n---foo \\ kitten") xml \ "foo" \ "kitten" foreach ( k=>println( k.text )) // 「@<属性名>」で属性へアクセス。 println("\n---type") println( xml \ "@type") // 「_」で全選択 println("\n---_ \\ @age") xml \ "_" foreach ( k=>println( k\"@age" ) )
実行結果です。
---kitten \ mii shiro ---kitten \\ mii shiro kuro ---tiger tora ---foo \ kitten kuro ---type animal ---_ \ @age 1 2 3
常識的に考えて「\」じゃなくて「/」だろー、とか思ったけど、派生元のIterableで使われてるから「\」とかになったのかな。