2

我在 scala 中加载一个 XML 文件,如下所示:

<dataset>
  <item label="neutral" target="general" tweetid="936466790" username="B_E_X">
    <content>Jim Lehrer just directed the debate audience ... 30 seconds ... #tweetdebate</content>
  </item>
  <item label="neutral" target="general" tweetid="936466992" username="Jonathan Fields">
    <content>Here we go. #tweetdebate</content>
  </item>
</dataset>

现在,我正在尝试使用属性获取每个项目的标签,但它总是没有返回我?我尝试了几种方法,例如匹配,解析等:

val rawXML = XML.loadFile(file).toList
rawXML.foreach(x => println(x.attribute("label")))

我还尝试了如下匹配:

myXML match { 
    case <dataset>
    {item @ <item>{theText}</item>}
    </dataset> => 
    println("An %s text: %s".format(item \ "@label", theText))
4

1 回答 1

0

有几种方法可以做到这一点。您的第一个版本的问题是您没有在子节点中搜索“标签”:

//Note the three whitespace nodes
scala> rawXML.child.foreach(x => println(x.attribute("label")))
None
Some(neutral)
None
Some(neutral)
None

您可以对具有“标签”属性的“项目”的所有子节点进行更精细的搜索:

scala> rawXML \ "item" \\ "@label"
res0: scala.xml.NodeSeq = NodeSeq(neutral, neutral)

如果您在 scala 中使用 xml 做了很多工作,那么我建议您使用Anti-XML。与 scala 的原生 xml 处理相比,它为您提供了更好的语法和性能改进(大部分)。

于 2013-04-20T13:00:21.963 回答