xml - XPath/XQuery:计算节点元素并返回带有父 ID 的最小计数
问题描述
我将举一个例子来更好地澄清自己。
例子:
<asdf>
<parentnode id ="1">
<childnode>
...
</childnode>
<childnode>
...
</childnode>
</parentnode>
<parentnode id ="2">
<childnode>
...
</childnode>
<childnode>
...
</childnode>
<childnode>
...
</childnode>
</parentnode>
<parentnode id ="3">
<childnode>
...
</childnode>
</parentnode>
</asdf>
我需要计算所有父节点的所有子节点,并返回给定父节点的子节点的最小数量及其 id。
对于此示例,解决方案将是:
<parentnode id="3" amount="1"/>
我真的不知道从哪里开始。我是否必须在 for 循环中计算不同的元素,或者这也可以使用 Xpath 表达式?我不确定这是否是正确的方向:
let $a := fn:doc('asdf.xml')/asdf/*
return
for $z in distinct-values($a/name() = childnode )
order by count($z) ascending
return $z)[1]
解决方案
- 按 的对这些
parentnode
元素进行排序count()
childnode
childnode
从该排序序列中,选择第一个,这是元素数量最少的序列- 然后使用元素的计算元素构造函数构造一个元素,复制它的任何属性,然后使用计算属性构造函数创建属性,为其分配元素的值
name()
$least-children
@amount
count()
childnode
.
let $least-children :=
(for $parent in $a
order by count($parent/childnode) ascending
return $parent)[1]
return
element {$least-children/name()} {
$least-children/@*,
attribute {"amount"} { count($least-children/childnode)}
}
推荐阅读
- dart - 如何在颤动中制作全局类型上下文变量?
- java - 哪种方式更好,CookieHandler 还是 org.apache.http.cookie?
- python - 如何将文档类型转换为火花 RDD
- java - 有没有办法从 sim 调用 android 中的应用程序
- python - 我使用“pandas.dataframe.nlargest()”的代码返回内存错误
- javascript - 在 2 个字符串中搜索占位符值
- css - 为什么我的字体不能在移动设备上运行?
- android - 如何使用房间在我的应用程序中存储基本的 D&D 统计数据,以便可以编辑和检索它们
- kubernetes - kube-apiserver 如何通过 cacerts 与 kubelet 通信?
- ruby - 无法使用 Selenium web-driver 在动态更改表中单击 href 下载链接