如何使用XQuery和plist XML文件查找值
下面的示例Plist文件用于我下面的问题如何使用XQuery和plist XML文件查找值,xml,xsd,plist,xquery,basex,Xml,Xsd,Plist,Xquery,Basex,下面的示例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<
<?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>
第一本字典
一串
一些文字
混乱
,但我无法使其正常工作。您可以使用纯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>
声明函数本地:returnValueForKey(
$key作为xs:string,
$plist作为元素(plist)
)作为元素(dict)?
{
$plist//key[..=$key]/以下同级::*[1]/self::dict
};
本地:returnValueForKey('secondDictionary',…)
=>
子词典
ABOLVALUE
ok。我正在做这个函数,看看我是否能理解它,但我遇到了一些错误。该函数是否与上面的示例plist一样适用于您?函数returnValueForKey(…)使用保留的命名空间。好的,让我来处理一下。对不起,是的,函数必须在名称空间中。使用上面的固定示例,或者使用包含函数的模块的名称空间前缀代替local
。该方法不再给出错误,但不会给出结果。稍后我将讨论XQuery方法。但是,该方法的内部代码有效-->//key[.=$key]/以下同级::*[1]/self::dict。。。所以我认为这是正确的。你能解释最后一部分的意思吗?-->我确信<代码>self::dict
仅当它是dict时才选择上下文节点。在这种情况下,它更像是一份保险单following sibling::*[1]
将始终使用紧跟其后的sibling元素,并且self::dict
保证它只返回一个dict。此模式更安全,因为following sibling::dict
将返回紧跟在上下文节点之后的第一个dict,无论它是否是上下文节点之后的元素。
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>