ScalaでXMLファイルから次のようなXPath式で表されるのノードを選択したくてサンプルプログラムを作ってみました.
XPath式:"/musicLibrary/cd[string(year) = '1994']/title"
[サンプルプログラム]
import scala.xml.XML
import scala.xml.Node
import scala.xml.Elem
object Main {
def main(args: Array[String]): Unit = {
val root:Elem = XML.loadFile("MusicLibrary.xml")
val cds =
((root \\ "musicLibrary" \ "cd")
.filter(p => p.asInstanceOf[Elem].child
.filter(child => isElem(child) &&(child.asInstanceOf[Elem].label == "year"))
.exists(year => year.text == "1994")))
val titles = cds \ "title"
titles.foreach(title => println("The title='" + title.text + "'"))
}
def isElem(node:Node) ={
node match{
case e:Elem => true
case _ => false
}
}
}
このプログラムで入力XMLファイル(MusicLibrary.xml)の以下が部分が選択され、
<?xml version="1.0" encoding="utf-8"?>
<musicLibrary>
...
<cd id="4">
<title>The Dark Side of the Moon</title>
<year>1994</year>
<artist>Pink Floyd</artist>
<genre>Rock</genre>
</cd>
...
</musicLibrary>
一応
The title='The Dark Side of the Moon'
とコンソール表示されます.
しかし、まったくの初心者のプログラムのため
val cds = 以下とval titles=以下は非常に冗長に感じられます.
もっとシンプルに目的のノードを選択できるコーディングがありましたらご教授ください.
以上 よろしくお願いいたします.
No.1ベストアンサー
- 回答日時:
import scala.xml.XML
object Main {
def main(args: Array[String]) {
val root = XML.loadFile("MusicLibrary.xml")
for {
cds <- root \\ "musicLibrary" \ "cd"
if (cds \ "year").text == "1994"
titles <- cds \ "title"
title <- titles
} println("The title='" + title.text + "'")
}
}
私も Scala で XML を触ったことはないのであまり知りませんが、こんな感じじゃないでしょうか。
私の環境では正しく動いているように思えますが、バグっていたらすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- 英語 BIG CITY LIFE Look at the title of the text. Use a 2 2022/05/17 22:07
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
昔Winnyってありましたけど、あ...
-
2分探索木の高さを求めるプロ...
-
VB6.0でDOMを使用して...
-
CPUの考え方を教えてください ...
-
C# TreeView 効率良いノード追...
-
グラフ色塗り問題のプログラミ...
-
C#初心者です。HtmlAgilityPack...
-
ツリービューを閉じさせたくない。
-
カウントアップ
-
同じタグ名の項目取得
-
eclipseへのxmlファイル追加
-
XMLで要素が記述された順番に意...
-
xmlファイルが上手にHTMLに変換...
-
東芝のDynabookなのですがアン...
-
XML、XSLTの適応エラー(IEから...
-
Dreamweaver CS3 : シングルク...
-
excelにてweb関数を使い、webデ...
-
ASPで型宣言
-
XMLで特殊文字を扱うにはどうし...
-
特殊記号が勝手にエスケープさ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
昔Winnyってありましたけど、あ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
同じタグ名の項目取得
-
あるノードリストに、特定の名...
-
ノードとは
-
TreeView の初期表示について
-
ツリービューのノードをダブル...
-
ノード数とは?
-
コンテキストメニュークリック...
-
XML文書の指定した属性値を持つ...
-
C#でtreeviewの指定ノードを選...
-
複数のマックPCによる数値計算...
-
VB6.0ツリービューについて
-
TreeViewの再表示のちらつきを...
-
VB6.0でDOMを使用して...
-
vbsのDOMDocumentで要素のText...
-
TreeViewで複数ノードの選択は...
-
C# TreeView 効率良いノード追...
おすすめ情報