我正在尝试编写一个查询,该查询返回哪个作者/编辑器在两个单独的元素中发生的最多(“redaktør”(编辑)和“forfatter”(作者))。例如。下面我从我的XML中包含了两个bok-elements。作者西蒙格雷两次出现,一次是作者,一次是编辑,而迈克尔·布伦戴奇只出现一次(作为作者)。从这个XML中,结果应该是Simon Gray。
到目前为止,我有以下查询:
let $xml := doc('../Fagboker.xml')
return
(
for $name in ($xml//forfatter)
order by count($xml//forfatter[. = $name]) descending
return
<x>{$name}</x>
)[1]
这只会返回作者发生的最多。我需要将其扩展到计算编辑器。我尝试过诸如以下的查询:
let $xml := doc('../Fagboker.xml')
return
(
for $name in ($xml//forfatter)
order by count($xml[. = $name] and $xml/*[parent::bok[child::redaktør]]) descending
return <x>{$name}</x>
)[1]
无济于事。我需要完全重写这个,还是有办法包含“redaktør”?
<fagbøker>
<bok isbn="9780321392794">
<tittel>Data Structures in Java: From Abstract Data Types to the Java Collections
Framework</tittel>
<forfatter>
<fornavn>Simon</fornavn>
<etternavn>Gray</etternavn>
</forfatter>
<utgivelsesår>2006</utgivelsesår>
<utgavenr>1</utgavenr>
<fagfelt>
<felt>Programmering</felt>
</fagfelt>
<referanser>
<tittel/>
</referanser>
<forlag>Pearson</forlag>
<TOC>
<komponent>Part 1: Intro <komponent>Chapter 1: Hei <komponent>Subchapter 1 </komponent>
</komponent>
</komponent>
</TOC>
</bok>
<bok isbn="0321165810">
<tittel>XQuery: The XML Query Language</tittel>
<forfatter>
<fornavn>Brundage</fornavn>
<etternavn>Michael</etternavn>
</forfatter>
<redaktør>
<fornavn>Simon</fornavn>
<etternavn>Gray</etternavn>
</redaktør>
<utgivelsesår>2004</utgivelsesår>
<utgavenr>1</utgavenr>
<fagfelt>
<felt>XML</felt>
<felt>Databaser</felt>
</fagfelt>
<referanser>
<tittel/>
</referanser>
<forlag>Addison-Wesley Professional</forlag>
<TOC>
<komponent>Part 1: Intro <komponent>Chapter 1: Hei <komponent>XPath
<komponent> </komponent>
</komponent>
</komponent>
</komponent>
</TOC>
</bok>
</fagbøker>
答案 0 :(得分:1)
您可以使用union(|
)运算符在一个XPath中同时选择forfatter
和redaktør
:
let $xml := doc('../Fagboker.xml')
return
(
for $name in distinct-values(/fagbøker/bok/*[self::forfatter|self::redaktør])
let $count := count(/fagbøker/bok/*[self::forfatter|self::redaktør][. eq $name])
order by $count descending
return <x>{$name}</x>
)[1]
<强> demo
强>