XPath 1.0 - 如何在我选择的元素中获得最小值?

时间:2014-01-31 15:49:04

标签: xpath min xpath-1.0

文件示例(基于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]

有没有人可以帮助我?

谢谢!

2 个答案:

答案 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扩展功能库。这包括miniumumlowest函数。见http://exslt.org/math/functions/min/

如果没有EXSLT,您需要使用命名模板作为子例程。 EXSLT页面也说明了这一点。