2016-12-16 3 views
0

У меня есть этот XML-текст:перебрать тег XML с таким же именем

<apps> 
    <app><id>"abcde"</id></app> 
    <app><id>"xyz"</id></app> 
    <app><id>"bcn"</id></app> 
</apps> 

Я использую библиотеку scala.xml, чтобы справиться с этим.

Я хотел бы перебрать app тегов в цикле, как это:

(xmlText \\ "apps" \\ "app").foreach(app => { 
    //do something 
} 

Однако, в этом случае я могу получить только первый app тег.

Как я могу указать, что я хочу второй, третий и т. Д.?

ответ

1

работает для меня:

import scala.xml.Elem 
import scala.xml.XML 

object TagIter { 
    val xmlText = <apps> 
        <app><id>"abcde"</id></app> 
        <app><id>"xyz"</id></app> 
        <app><id>"bcn"</id></app> 
       </apps> 
    def main(args: Array[String]) { 
    (xmlText \\ "apps" \\ "app").foreach { app => 
     //do something 
     println(app.text) 
    } 
    } 
} 

"abcde" 
"xyz" 
"bcn" 

Ваш код, конечно, итерацию по всем узлам. Если вы хотите действовать только на N-м узле, вы можете добавить переменную, которая отслеживает, сколько вы видели до сих пор.

Там в этом тоже: https://stackoverflow.com/questions/4468461/select-nth-child-in-xquery-select-next-element

Если применить индекс к выражению, вы выбираете один узел:

(xmlText \\ "apps" \\ "app")(1) 
"xyz" 
+0

Спасибо. У меня была совершенно другая проблема в моем коде. – octavian