0

以下示例 Plist 文件用于我下面的问题。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>firstDictionary</key>
    <dict>
        <key>string</key>
        <string>someText</string>
        <key>anArray</key>
        <array>
            <string>first</string>
            <string>second</string>
        </array>
    </dict>
    <key>secondDictionary</key>
    <dict>
        <key>subDictionary</key>
        <dict>
            <key>aBoolValue</key>
            <false/>
        </dict>
    </dict>
</dict>
</plist>

所以我的问题是,由于这是一个 Plist(使用 XCode),所有键都有元素名称<key>,值可以是 , 等...键值对总是并排的(直接兄弟)。 .

有没有办法使用 XQuery 为键生成值?比如说 retuenValueForKey(secondDictionary) 来产生以下内容?

<dict>
    <key>subDictionary</key>
    <dict>
        <key>aBoolValue</key>
        <false/>
    </dict>
</dict>

到目前为止,我的主要参考资料是来自 W3Schools 的这个链接,但我无法让它正常工作。

4

1 回答 1

1

您可以在纯 XPath 中执行此操作,但如果您想将其包装在一个也可以正常工作的函数中:

declare function local:returnValueForKey(
  $key as xs:string,
  $plist as element(plist)
) as element(dict)?
{
   $plist//key[. = $key]/following-sibling::*[1]/self::dict
};

local:returnValueForKey('secondDictionary', <plist>...</plist>)
=>
<dict>
  <key>subDictionary</key>
  <dict>
    <key>aBoolValue</key>
    <false/>
  </dict>
</dict>
于 2013-04-19T21:09:23.053 回答