文件示例(基于itunes xml文件的练习):
<plist version="1.0">
<dict>
<key>Major Version</key><integer>1</integer>
<key>Minor Version</key><integer>1</integer>
...
<dict>
<key>219</key>
<dict>
<key>Track ID</key><integer>219</integer>
<key>Name</key><string>Ruby</string>
...
<key>Track Number</key><integer>1</integer>
<key>Track Count</key><integer>11</integer>
<key>Year</key><integer>2010</integer>
<key>Date Modified</key><date>2010-08-28T10:16:04Z</date>
<key>Date Added</key><date>2010-08-30T19:40:27Z</date>
...
</dict>
<key>243</key>
<dict>
<key>Track ID</key><integer>223</integer>
<key>Name</key><string>No More Mr Nice Guy</string>
...
<key>Track Number</key><integer>1</integer>
<key>Track Count</key><integer>11</integer>
<key>Year</key><integer>2005</integer>
<key>Date Modified</key><date>2010-08-28T10:17:54Z</date>
<key>Date Added</key><date>2010-08-30T20:14:13Z</date>
...
</dict>
(我需要使用XPath 1.0) 我需要得到最古老的赛道的名称(比较元素年份) 但是在完成了获得全年元素的要求之后,我不知道如何获得最小年份:
/plist/dict/dict/dict/integer[./preceding-sibling::key="Year"][1]
有没有人可以帮助我?
谢谢!
答案 0 :(得分:0)
我知道没有XPath 1.0解决方案。 XPath 1.0缺少fn:min()
,order by
等重要功能
这是一个XPath 2.0解决方案,以防您升级:
/plist//dict
[ key[. ="Year"]/following-sibling::integer/xs:integer(.) eq
min(../dict/key[. ="Year"]/following-sibling::integer/xs:integer(.)) ]
/key[. eq "Name"]/following-sibling::string/fn:string()
答案 1 :(得分:0)
许多(但不是全部)XSLT处理器支持部分或全部EXSLT扩展功能库。这包括miniumum
和lowest
函数。见http://exslt.org/math/functions/min/
如果没有EXSLT,您需要使用命名模板作为子例程。 EXSLT页面也说明了这一点。