一般来说,我是 XPath 和 xml 解析的新手。我阅读了一些文档,但找不到解决我的问题的方法。我的 .xml 看起来像这样(仅供参考:它是“iTunes Music Library.xml”的播放列表部分):
<dict>
<array>
<dict>
<key>Name</key><string>Playlist 1</string>
<key>Playlist ID</key><integer>187826</integer>
<key>Playlist Persistent ID</key><string>04250E0617138909</string>
<key>All Items</key><true/>
<key>Playlist Items</key>
<array>
<dict>
<key>Track ID</key><integer>11111</integer>
</dict>
<dict>
<key>Track ID</key><integer>22222</integer>
</dict>
</array
</dict>
<dict>
<key>Name</key><string>Playlist 2</string>
<key>Playlist ID</key><integer>187826</integer>
<key>Playlist Persistent ID</key><string>04250E0617138909</string>
<key>All Items</key><true/>
<key>Playlist Items</key>
<array>
<dict>
<key>Track ID</key><integer>23456</integer>
</dict>
<dict>
<key>Track ID</key><integer>34567</integer>
</dict>
</array
</dict>
</dict>
我的输入是一个包含播放列表名称的字符串。现在这是我想要的输出:与该特定播放列表相关的所有歌曲 ID。不幸的是,名称不是例如array或第一个dict的属性。这是我得到的(java代码):
ap.selectXPath("//dict/array/dict/string[1][text()=\"" + playlistName + "\"]");
当然,这只是给了我我的播放列表名称。那么从现在开始如何进行呢?我想到了:像这样解析文件,直到解析器达到所需的名称:
ap.selectXPath("//dict/array/dict[" + count++ +"]/string[1]");
带有“整数计数”。然后使用适当的查询从该位置重新开始。再说一次,这似乎并不优雅或高效。
长话短说:是否有 XPath 查询可以满足我的要求?