我需要从iTunes Music Library.xml文件中提取信息。由于xml是plist形式,因此有点麻烦。
我想从我的“播放列表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),打印该播放列表下的所有Track Ids值(此处为: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上的任何专家都可以帮助我。我会很高兴的。
答案 0 :(得分: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>
感谢。