2013-07-09 8 views
2

Там нет никаких проблем перебора это:Scala: Итерация через XML-узел

<entries> 
    <entry> 
    <name>Kitten</name> 
    <special>Yup</special> 
    </entry> 
    <entry> 
    <name>Gato</name> 
    <special>Nope</special> 
    </entry> 
</entries> 

с этим подходом

for(entry <- data) 
... 

Но теперь, когда я пытаюсь перебирать в записи

т.е. :

<entry> 
<name>Kitten</name> 
<special>Yup</special> 
</entry> 

Я не могу на самом деле перейти через имя, а затем перейти к специальному вместо этого, он просто рассматривает этот узел как один элемент и проходит только один цикл. Как мне пройти каждый элемент?

ответ

3

С помощью метода child, возможно?

Например,

for (bar <- <foo><bar><kv/></bar><bar><kv/></bar></foo>.child; kv <- bar.child) {println (kv)} 

печатает

<kv/> 
<kv/> 
2

Если вы хотите получить список дочерних элементов от корня, независимо от глубины, то вы можете сделать это:

val elems = xml.descendant.collect{case e:Elem => e} 

В результате elems будет List[Elem], представляющий любого ребенка Elem от корня.

Смежные вопросы