Scala XML找不到属性

时间:2016-06-01 14:57:14

标签: scala

我正在尝试从以下XML解析XML属性:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

具体来说,我想从country标签中获取name属性。我正在使用此代码:

import scala.xml.XML

object XmlReader {
    def main(args: Array[String]) {
        val xml = XML.loadFile("src/main/resources/country_data.xml")
        println(xml \\ "data" \\ "country" \ "@name")
    }
}

无论我尝试什么,我都会得到一个空值。我知道“xml \'data'\'country'”很好,因为我可以在运行时看到打印出来的XML。但是一旦我试图获得国家标签的属性,我什么也得不到。看起来我正在完成本教程所展示的内容(http://alvinalexander.com/scala/scala-xml-searching-xmlns-namespaces-xpath-parsing),但我没有得到结果。

更新:当我只有一个国家/地区节点时,以下工作:

(xml \\ "data" \ "country" \ "@name").text

我不知道为什么。

1 个答案:

答案 0 :(得分:1)

如果搜索中有多个匹配,则会返回一个节点列表。你可以用循环迭代它:

val xml = <r><p><c a="first"/><c a="second"/></p></r>
for ( c <- xml \\ "r" \\ "p" \\ "c") {
    println(c \\ "@a")
}