2

次のような XML ファイルを scala にロードしています。

<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 に答える