gpt4 book ai didi

xquery - 如何在XQuery中找到两个节点的最低公共(public)祖先?

转载 作者:行者123 更新时间:2023-12-02 06:21:13 28 4
gpt4 key购买 nike

假设输入 XML 为

<root>
<entry>
<title>Test</title>
<author>Me</author>
</entry>
</root>

我想找到 titleauthor 的最低共同祖先。我在 BaseX 中尝试了以下代码:

 let $p := doc('t.xq')//title, 
$q := doc('t.xq')//author,
$cla := ($p/ancestor-or-self::node() intersect $q/ancestor-or-self::node())
return
$cla

但它什么也没返回(空白输出)。

最佳答案

除了返回所有共同祖先之外,你的代码对我来说工作得很好。

最后的共同祖先

由于它们按文档顺序返回,并且最后一个公共(public)祖先也必须是最后一个节点,因此只需使用 [last()] 谓词进行扩展即可。

declare context item := document {
<root>
<entry>
<title>Test</title>
<author>Me</author>
</entry>
</root>
};

let $p := //title,
$q := //author,
$cla := ($p/ancestor-or-self::node() intersect $q/ancestor-or-self::node())[last()]
return
$cla

文件和数据库

如果您发布的查询未返回任何内容,则您可能正在处理文件 t.xqintersect 要求在同一个数据库中比较所有节点,每次对文件调用doc(...)都会创建一个新的in-内存数据库。要么在 BaseX 中使用内容创建一个数据库,要么执行类似的操作

declare variable $doc := doc('t.xq');

并用 $doc 替换后续的 doc(...) 调用(它现在引用为文件)。

关于xquery - 如何在XQuery中找到两个节点的最低公共(public)祖先?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30815918/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com