首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >marklogic中使用xquery的XDMP-NOTANODE错误

marklogic中使用xquery的XDMP-NOTANODE错误
EN

Stack Overflow用户
提问于 2015-12-05 08:44:27
回答 3查看 375关注 0票数 1

当我试图在中运行XQuery时,会得到XQuery XDMP-NOTANODE MarkLogic错误。当我加载xml文档时,我用它们加载了元数据文件。我是一个学生,我没有XQuery的经验。

错误:

代码语言:javascript
复制
[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())&#9;&#9;    &#1...", (), <options xmlns="xdmp:eval"><database>4206169969988859108</database>   <root>C:\mls-projects\pu...</options>)
$article := xs:untypedAtomic("&#10;")
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. 

代码:

代码语言:javascript
复制
(
 for $article in fn:distinct-values(/article/text())         
 return (
  fn:distinct-values($article/article/front/article-meta/title-group/article-title/text())
 )      
)
EN

回答 3

Stack Overflow用户

发布于 2015-12-07 00:32:17

每个$article都绑定到一个原子值(fn:distinct-values()返回一个原子值序列)。然后,尝试在$article上应用路径表达式(使用$article运算符)。这是被禁止的,因为路径操作符要求它的LHS算子是节点。

恐怕您的代码没有足够的意义让我建议您一个实际的解决方案。我只能找出错误在哪里。

此外,在路径的末尾使用text()在大多数情况下都是个坏主意。如果/article是一个复杂的文档,那么它肯定不是您想要的。您选择的文本节点之一(很可能是第一个)只是一个换行符。

你想达到什么目的?

票数 3
EN

Stack Overflow用户

发布于 2015-12-08 14:48:34

您的$article变量绑定到原子值,而不是本文文档中的node()。只能在节点上使用XPath轴。

当您在distinct-values()语句中应用函数for时,它返回简单的字符串值,而不是从它返回的项目文档或节点。

您可能可以通过使用谓词筛选器中的值来工作,如下所示:

代码语言:javascript
复制
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错误,但是可能有更容易(更有效)的解决方案来实现您的目标。如果你要发布一份你的文档样本并描述你想要达到的目标,我们可以提出一些替代方案。

票数 0
EN

Stack Overflow用户

发布于 2016-01-04 14:55:46

有点胡思乱想,但代码中有两个不同的值。这让我觉得你想要一个独一无二的文章列表,然后是文章标题的唯一列表。我希望你已经有了一个独特的文章在你的数据库中,除非你明确地试图去复制它们。

如果您只想要完整的文章标题列表,我会这样做:

代码语言:javascript
复制
distinct-values(
    for $article in collection()/article
    return
        $article/front/article-meta/title-group/article-title
)

哈哈!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34102970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档