XML工房
~第2章~ iTunes音楽リストのHTML化(1)
2006年3月号掲載記事
こんにちは。インフォテリアの野中です。
前回の最後に紹介した出力イメージには、ジャンル、曲名、アーティスト、コメントがありました。これらの情報は、<key>Tracks</key>の直下にあるdict要素の子要素であるdict要素の中に含まれています。(ルート要素(plist要素)から数えると3回目に出現するdict要素になります。)
iTunes Music Library.xml |
・ ・ <plist version="1.0"> <dict> ・ ・ <key>Tracks</key> <dict> <key>37</key> <dict> <key>Track ID</key><integer>37</integer> <key>Name</key><string>Holst: The Planets, Op. 32, H 125 - 1. Mars, The Bringer Of War</string> <key>Artist</key><string>Sir Georg Solti; London Philharmonic Orchestra</string> <key>Composer</key><string>Holst, Gustav (1874-1934)</string> <key>Album</key><string>Holst: The Planets; Elgar: Pomp & Circumstance</string> <key>Genre</key><string>Classical</string> ・ ・ <key>Comments</key><string>お気に入りのクラッシック1</string> ・ ・ </dict> <key>38</key> <dict> <key>Track ID</key><integer>38</integer> <key>Name</key><string>Holst: The Planets, Op. 32, H 125 - 2. Venus, The Bringer Of Peace</string> <key>Artist</key><string>Sir Georg Solti; London Philharmonic Orchestra</string> <key>Composer</key><string>Holst, Gustav (1874-1934)</string> <key>Album</key><string>Holst: The Planets; Elgar: Pomp & Circumstance</string> <key>Genre</key><string>Classical</string> ・ ・ <key>Comments</key><string>お気に入りのクラッシック2</string> ・ ・ </dict> ・ ・ </dict> ・ ・ </dict> </plist> |
※上記のデータは、一部省略しております。 |
コメント(<key>Comments</key><string>お気に入りのクラッシック1</string>)については、iTunesに取り込んだだけでは設定されません。曲のプロパティとして、個別に設定する必要があります。コメントが設定されていない場合は、コメントデータ(<key>Comments</key><string>~~~</string>)が「iTunes Music Library.xml」中には存在しません。それ以外のジャンル(Genre)、曲名(Name)、アーティスト(Artist)は、iTunesに取り込むことで自動的に設定されます。
「iTunes Music Library.xml」よりジャンル、曲名、アーティスト、コメントを出力する基本的なXSLTスタイルシートを紹介します。
iTunes Music Library.xml |
<?xml version="1.0" encoding="Shift_JIS" ?> <xsl:output method="html" indent="yes" encoding="Shift_JIS" <xsl:template match="/"> <body> <!-- 音楽データの情報取得 --> <!-- key要素のためのテンプレート --> </xsl:stylesheet> |
このXSLTスタイルシートでは、key要素の内容が「Genre(ジャンル)」の場合、「Name(曲名)」の場合、「Artist(アーティスト)」の場合、「Comments(コメント)」の場合に、各々key要素のためのテンプレートを呼び出します。ただし、前述のとおり、Comments(コメント)が設定されていない場合は、データとして存在しませんので、if要素において存在する場合と存在しない場合とで分岐しています。
そして、key要素のためのテンプレートでは、key要素の次の兄弟ノードの値を取得します。ここで、value-of要素のselect属性には、"following-sibling::node()[1]"と記述していますが、"following-sibling::node()"と記述しても実は同じ結果を返します。"following-sibling::node()[1]"と記述した場合は、key要素の次に出てくる1番目のノードのみを選択し、"following-sibling::node()"と記述した場合は、key要素の次に出てくるすべてのノードを選択しますが、XSLTのvalue-of要素の処理は、複数ノードのうちの最初のノードの値のみを取得するからです。
それでは、お手持ちのXSLT変換ツールでXSLT変換を行なってみましょう。(注1)
出力イメージどおりに変換されましたか?
次回は、このXSLTスタイルシートを元に、iTunesのプレイリストにある「最近追加した曲」の一覧を出力するためのXSLTスタイルシートを作成したいと思います。
(注1)
XSLT変換ツールをお持ちでない方は、JavaでXSLT変換を行うことができます。次のようなプログラムを実行します。このXSLTExecクラスは、実行時の第1引数であるXMLファイルを、第2引数であるXSLTスタイルシートで変換し、そして第3引数であるファイルに変換結果を出力します。プログラムの動作確認はJ2SE 5で行っています。
>Java XSLTExec output.xml sample.xsl output.txt |
import java.io.FileOutputStream; import javax.xml.transform.Transformer; public class XSLTExec { /** try { Transformer tr = tf.newTransformer(new StreamSource(xslt)); System.out.println("Output to " + output); |
→続きはこちらで