当我试图在中运行XQuery时,会得到XQuery XDMP-NOTANODE MarkLogic错误。当我加载xml文档时,我用它们加载了元数据文件。我是一个学生,我没有XQuery的经验。
错误:
[1.0-ml] XDMP-NOTANODE: (err:XPTY0019) $article/article/front/article-meta/title-group/article-title -- xs:untypedAtomic(" ") is not a node
Stack Trace
At line 3 column 77:
In xdmp:eval("(for $article in fn:distinct-values(/article/text())		 ...", (), <options xmlns="xdmp:eval"><database>4206169969988859108</database> <root>C:\mls-projects\pu...</options>)
$article := xs:untypedAtomic(" ")
1. (for $article in fn:distinct-values(/article/text())
2.
3. return (fn:distinct-values($article/article/front/article-meta/title-group/article-title)
4.
5. 代码:
(
for $article in fn:distinct-values(/article/text())
return (
fn:distinct-values($article/article/front/article-meta/title-group/article-title/text())
)
)发布于 2015-12-07 00:32:17
每个$article都绑定到一个原子值(fn:distinct-values()返回一个原子值序列)。然后,尝试在$article上应用路径表达式(使用$article运算符)。这是被禁止的,因为路径操作符要求它的LHS算子是节点。
恐怕您的代码没有足够的意义让我建议您一个实际的解决方案。我只能找出错误在哪里。
此外,在路径的末尾使用text()在大多数情况下都是个坏主意。如果/article是一个复杂的文档,那么它肯定不是您想要的。您选择的文本节点之一(很可能是第一个)只是一个换行符。
你想达到什么目的?
发布于 2015-12-08 14:48:34
您的$article变量绑定到原子值,而不是本文文档中的node()。只能在节点上使用XPath轴。
当您在distinct-values()语句中应用函数for时,它返回简单的字符串值,而不是从它返回的项目文档或节点。
您可能可以通过使用谓词筛选器中的值来工作,如下所示:
for $article-text in fn:distinct-values(/article/text())
return
fn:distinct-values(/article[text()=$article-text]/front/article-meta/title-group/article-title/text())注意:上面的应该避免XDMP错误,但是可能有更容易(更有效)的解决方案来实现您的目标。如果你要发布一份你的文档样本并描述你想要达到的目标,我们可以提出一些替代方案。
发布于 2016-01-04 14:55:46
有点胡思乱想,但代码中有两个不同的值。这让我觉得你想要一个独一无二的文章列表,然后是文章标题的唯一列表。我希望你已经有了一个独特的文章在你的数据库中,除非你明确地试图去复制它们。
如果您只想要完整的文章标题列表,我会这样做:
distinct-values(
for $article in collection()/article
return
$article/front/article-meta/title-group/article-title
)哈哈!
https://stackoverflow.com/questions/34102970
复制相似问题