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]

有谁能帮助我吗?

谢谢!

4

2 回答 2

0

许多(但不是全部)XSLT 处理器支持部分或全部 EXSLT 扩展函数库。这包括miniumumlowest功能。见http://exslt.org/math/functions/min/

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

于 2014-01-31T16:20:23.197 回答
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()
于 2014-01-31T16:14:14.693 回答