' /'的第一个操作数的必需项类型是node();提供的值具有项类型xs:anyAtmonicType

时间:2014-09-05 05:37:13

标签: xpath xquery

嗨,有人可以帮助我,我不知道为什么会这样做

  

“'/'的第一个操作数的必需项类型是node();提供的值   项目类型为xs:anyAtmonicType“。

我正在尝试按年度对网站进行分组。

 <publications>
    {
    for $x in distinct-values(//www) 
    return 
    <year-Pub>{for $y in //www where $x/year = $y/year
    return <year>{$y/*}</year>}</year-Pub>
    }
    </publications>

2 个答案:

答案 0 :(得分:2)

我怀疑你想要

<publications>
    {
    for $x in distinct-values(//www/year) 
    return 
    <year-Pub>{for $y in //www[year = $x]
               return <year>{$y/*}</year>}</year-Pub>
    }
</publications>

或者在XQuery 3.0中查看“group by”。

答案 1 :(得分:1)

distinct-values(...)返回一系列xs:anyAtomicType值,例如。字符串或数字,但从不XML节点(node())。在一系列XML节点(//www返回)上运行时,会为每个节点隐式调用fn:data(...)以将其转换为原子值。

在第for $y in //www where $x/year = $y/year行中,您希望执行从$x开始的轴步骤,此后无法执行此步骤。

由于您没有提供任何输入或描述您想要实现的目标,我无法帮助您使用经过验证的工作解决方案,而是作为处理不同节点的简要草图:

  • 像以前一样获取不同的值(并确保它们包含您的目标)。我想你需要distinct-values(//www/year代替。)
  • 现在,遍历所有节点,并且在比较期间记住变量已经保持原子值,而不是元素。