21.3. Klasa scala.xml.NodeSeq
Klasa scala.xml.Node rozszerza klasę scala.xml.NodeSeq, która reprezentuje sekwencję węzłów. Z kolei klasa NodeSeq rozszerza Seq[Node].
Metoda \ klasy NodeSeq zwraca elementy-dzieci mające określoną nazwę.
scala> val m: scala.xml.NodeSeq = <a id="1">2</a><b>3<d><e>z</e></d></b><c
| id="4">5</c><b>x<e>y</e></b>
m: scala.xml.NodeSeq = NodeSeq(<a id="1">2</a>, <b>3<d><e>z</e></d></b>, <c id="4">5</c>, <b>x<e>y</e></b>)
scala> val m1 = m \ "b"
m1: scala.xml.NodeSeq = NodeSeq()
scala> val m2 = m \ "e"
m2: scala.xml.NodeSeq = NodeSeq(<e>y</e>)
Metoda \\ klasy NodeSeq pozwala na dostęp do elementów-potomków mających określoną nazwę, niezależnie od stopnia zagnieżdżenia.
scala> val m3 = m \\ "b" m3: scala.xml.NodeSeq = NodeSeq(<b>3<d><e>z</e></d></b>, <b>x<e>y</e></b>) scala> val m4 = m \\ "e" m4: scala.xml.NodeSeq = NodeSeq(<e>z</e>, <e>y</e>)
Metody \ oraz \\ pozwalają również na dostęp do atrybutów węzłów. Nazwę atrybutu poprzedza się znakiem @.
scala> val x = <a id="aa" class="bb"/> x: scala.xml.Elem = <a id="aa" class="bb"/> scala> val x1 = x \ "@id" x1: scala.xml.NodeSeq = aa scala> val x2 = x \\ "@class" x2: scala.xml.NodeSeq = NodeSeq(bb)
![]() | Metody \ i \\ przypominać mogą stosowane w języku XPath wyrażenia pojedynczego i podwójnego ukośnika (/ i //), jednak ukośniki w nazwach metod klasy NodeSeq nachylone są w inną stronę, niż ukośniki z języka XPath. W języku Scala podwójny ukośnik // oznacza początek komentarza i wobec tego nie mógł być użyty jako nazwa metody. |
Metoda text zwraca dane tekstowe zawarte w węzłach.
scala> val m5 = m.text m5: String = 23z5xy
Metoda apply pozwala na wybór węzłów spełniających jakiś warunek, bądź wybór węzła według jego numeru w sekwencji.
scala> val m6 = m(2)
m6: scala.xml.Node = <c id="4">5</c>
scala> val m7 = m(1)
m7: scala.xml.Node = <b>3<d><e>z</e></d></b>
scala> val m8 = m((_:scala.xml.Node).attribute("id") != None)
m8: scala.xml.NodeSeq = NodeSeq(<a id="1">2</a>, <c id="4">5</c>)

