2011-08-12 17 views
0

iTunes Music Library.xmlファイルから情報を抽出する必要があります。 xmlはplistの形になっているので、少し面倒になっています。iTunes Music Library XMLからの情報の抽出XSLT?

「プレイリストID」がある特定のプレイリストからすべてのトラックIDのリストを取得したいとします。

たとえば、iTunesプレイリストは以下のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Playlists</key> 
    <array> 
     <dict> 
      <key>Name</key><string>Library</string> 
      <key>Master</key><true/> 
      <key>Playlist ID</key><integer>4053</integer> <!--Ex:4053 I have.--> 
      <key>Playlist Items</key> 
      <array> 
       <dict> 
        <key>Track ID</key><integer>2413</integer> 
       </dict> 
       <dict> 
        <key>Track ID</key><integer>2083</integer> 
       </dict> 
       <dict> 
        <key>Track ID</key><integer>2081</integer> 
       </dict> 
       <dict> 
        <key>Track ID</key><integer>6798</integer> 
       </dict> 
         </array> 
        <dict> 
        <!-- Here another playlist will start. with diff playlist ID --> 
      <array> 

</dict> 
</plist> 

詳細については、iTunes Music Library.xmlを確認してください。

基本的には、これが必要です。 (a)プレイリストID(ここでは4053)を指定すると、そのプレイリストのすべてのトラックID値(ここでは2413,2083,2081,6798)を印刷します。

私の試み:

<?xml version="1.0" encoding="ISO-8859-1"?> 

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="text" /> 

<xsl:template match="/"> 


<xsl:for-each select="plist/dict/array/dict"> 

    <xsl:choose> 
     <xsl:when test="child::integer[preceding-sibling::key[1]='Playlist ID']=4053"> 
      <!-- condition is not working fine, Below lines are working fine --> 
     <xsl:for-each select="plist/dict/array/dict/array/dict"> 
      <xsl:value-of select="child::integer[preceding-sibling::key[1]='Track ID']"/> 
      </xsl:for-each> 
     </xsl:when> 
    </xsl:choose> 


</xsl:for-each> 

</xsl:template> 

</xsl:stylesheet> 

はXSLT上の任意の専門家が、ここで私を助けることができます。私はとても嬉しく思っています。

+1

有効な入力XMLを作成してください。有効なXMLではありません(終了タグがありません)。また、サンプル出力を表示すると便利です。 – therealmarv

+0

こんにちは "therealmarv"、私は私の質問を変更しました。基本的に私はitun​​es音楽のlibrary.xmlファイルを解析しています。 iTunesがインストールされている場合は、xml形式をよりよく理解するためにxmlライブラリをチェックすることができます。しかし、私はそれを上で説明しました。ありがとう。 –

+0

Mac OS X:(iTunesライブラリファイルのパス) ** /ユーザー/ユーザー名/音楽/ iTunes/iTunes Library.xml ** Windows XP ** \ Documents and Settings \ユーザー名\ My Documents \ My Music \ iTunes \ iTunes Library Library ** Windows Vista ** \ Users \ユーザー名\ Music \ iTunes \ iTunes Library.xml ** Windows 7 ** \ユーザー\ユーザー名\ Myミュージック\ iTunes \ iTunes Library.xml ** –

答えて

2

私は愚かな間違いをして捕まえていました。 for-eachループ内のパスは相対パスでなければなりません。私はそれが後で誰かを助けるかもしれない答えを投稿しています。

<?xml version="1.0" encoding="ISO-8859-1"?> 

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="text" /> 

<xsl:template match="/"> 


<xsl:for-each select="plist/dict/array/dict"> 

    <xsl:choose> 
     <xsl:when test="child::integer[preceding-sibling::key[1]='Playlist ID']=4053"> 
     <xsl:for-each select="array/dict"> <!--**This should be relative**--> 
      <xsl:value-of select="child::integer[preceding-sibling::key[1]='Track ID']"/> 
      </xsl:for-each> 
     </xsl:when> 
    </xsl:choose> 

</xsl:for-each> 

</xsl:template> 

</xsl:stylesheet> 

ありがとうございました。

関連する問題