2012-06-25 15 views
6

Załóżmy, że mam dokumentu XML zapisany jako Anti-XML Elem:Dołącz elementem jako dziecko elementu Anti-XML

val root : Elem = 
    <foo attr="val"> 
     <bar/> 
    </foo> 

. Chcę dołączyć <baz>blahblahblah</baz> do elementu głównego jako dziecko, dając

val modified_root : Elem = 
    <foo attr="val"> 
     <bar/> 
     <baz>blahblahblah</baz> 
    </foo> 

Dla porównania w Pythonie można po prostu root.append(foo).

wiem, że mogę dołączyć (jak rodzeństwo) do Group[Node] wykorzystaniem :+, ale to nie jest to, co chcę:

<foo attr="val"> 
    <bar/> 
</foo> 
<baz>blahblahblah</baz> 

Jak mogę dołączyć go jako ostatniego dziecka <foo>? Patrząc na the documentation nie widzę oczywistego sposobu.


podobne do Scala XML Building: Adding children to existing Nodes, z wyjątkiem to pytanie jest dla zamiast Anti-XML scala.xml.

Odpowiedz

9

Elem jest case class, dzięki czemu można używać copy:

import com.codecommit.antixml._ 

val root: Elem = <foo attr="val"><bar/></foo>.convert 
val child: Elem = <baz>blahblahblah</baz>.convert 

val modified: Elem = root.copy(children = root.children :+ child) 

Sposób copy jest automatically generated for case classes, a to trwa nazwanych argumentów, które pozwalają zmieniać poszczególne pola oryginalnej instancji.

3

Chociaż nie jest to jeszcze istotne, ale istnieje addChild/ren metoda na Elem w master w repozytorium Anti-XML. Jego implementacja zawiera obecnie błąd, ale istnieje wyjątkowa prośba o jego usunięcie. Powinieneś więc prawdopodobnie użyć tego w przyszłej wersji.

(Zrobiłbym to komentarz, ale jeszcze nie pozwolono mi na to.)

Powiązane problemy