2013-04-04 2 views
2

Предположим, что у меня есть XML-файл, как следующее:Прочитайте содержание текста в файле XML

<conf> 
    <something> 
    blablabla 
    </something> 
</conf> 

Я хочу, чтобы получить строку blablabla

Я попытался с:

val data = XML.loadFile("conf.xml") 
val st = data \\ "conf" \\ "something" 
println(st) 

, но в качестве выходных данных у меня есть:

<something>blablabla</something> 

Я добавил строки кода:

st match { 
     case <something>{ txt }</something> => println(txt) 
} 

, но я получил scala.MatchError.

Что я могу попробовать?

Можете ли вы мне помочь?

ответ

5

Вы должны вызвать дополнительный text метод на выбранном NodeSeq для извлечения текста подузла в вашем XML элемента

val data = XML.loadFile("conf.xml") 
val st = data \\ "conf" \\ "something" 
println(st.text) 

I s uggest вы также trim результат, если вы не хотите дополнительного места бесплатно ...

+0

Большое спасибо. Можете ли вы дать мне некоторые подробности об этой отделке? – Aslan986

+2

println (st.text.trim) – Noah

+0

trim удаляет пробелы вокруг вашей строки –

1

Вы можете рассмотреть Anti-XML, что является проектом, который был очень полезен в то время как назад, но теперь немного не поддерживается, так что вам, возможно, придется переквалифицировать его самостоятельно.

Это позволит вам выбрать текст намного лучше, чем это.

несколько примеров:

"parse an elem with text" in { 
    fromString("<test>This is a test</test>") mustEqual elem("test", Text("This is a test")) 
} 

https://github.com/djspiewak/anti-xml/blob/master/src/test/scala/com/codecommit/antixml/XMLSpecs.scala

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