我正在尝试从以下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
我不知道为什么。
答案 0 :(得分:1)
如果搜索中有多个匹配,则会返回一个节点列表。你可以用循环迭代它:
val xml = <r><p><c a="first"/><c a="second"/></p></r>
for ( c <- xml \\ "r" \\ "p" \\ "c") {
println(c \\ "@a")
}