0

我有一组描述杂志内容的文件

<magazine>
<issue.number>22</issue.number>
 <article>
<title>first article</title>
<subject>James</James>
</article>
<article>
<title>second article</title>
<subject>James</subject>
</article>
</magazine>

我想以 . 格式输出文章列表<issue.number>, <title>

所以我创建了一个 XQuery:

for $x in /magazine
return concat($x/issue.number/text(),',',$x//title/text())

这会导致错误,我认为这是因为该<issue.number>值被返回了两次。在 eXist DB 中,我得到了这个:

参数 1 的实际基数与函数签名中声明的基数不匹配:concat($atomizable-values as xdt:anyAtomicType?, ...) xs:string?。预期基数:0 或 1,得到 2。

那么如果我不能使用我可以使用concat()什么?

4

1 回答 1

2

问题是该杂志元素中有两篇文章,因此您将两个值作为concat(...). 此外,您不需要text()在此处使用(在大多数情况下,不应该)。

一次循环浏览杂志,然后再次浏览文章。只遍历文章也可以,但是您必须使用我更愿意避免的父轴。

for $magazine in $xml/magazine
for $article in $magazine/article
return concat($magazine/issue.number, ',', $article//title)

22、第一条
22、第二条


对于字符串序列的连接,请查看string-join($sequence, $seperator). 例如,如果您想要连续一期的所有标题。

for $magazine in $xml/magazine
return concat($magazine/issue.number, ': ', string-join($magazine//title, ', '))

这将返回

22:第一篇,第二篇

于 2013-07-13T21:42:29.717 回答