以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XQuery/XLink/XPointer/ 』  (http://bbs.xml.org.cn/list.asp?boardid=14)
----  请教XQuery中distinct-values()的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=14&rootid=&id=15608)


--  作者:neushi
--  发布时间:3/15/2005 11:19:00 AM

--  请教XQuery中distinct-values()的问题
假设有这样一段XML文档:
<peoples>
   <people id="1"><name>zhang</name></people>
   <people id="1"><name>zhang</name></people>
   <people id="2"><name>li   </name></people>
   <people id="3"><name>zhao </name></people>
</peoples>
里面由于有重复信息,我想把不同的人抽取出来
我希望的结果是
  <people id="1"><name>zhang</name></people>
  <people id="2"><name>li   </name></people>
  <people id="3"><name>zhao </name></people>
distinct-nodes()返回全部4条记录!,而distinct-values()返回一堆字符串,结果都不是我想要的。
我查了一下,好像是现在的xquery draft将distinct-values函数的意义改了,这个函数原来的意思是返回不同值的一组节点,而现在的意思则是返回不同的text类型的值
实在想不通为什么w3c的标准为什么不重新增加一个函数,而改了原来函数的意思。
另外我写了一个函数用来产生我想要的结果,如下。但是可能效率不好,希望大侠能给推荐一个优化的方法,谢谢!
declare function distinctNodes($allNodes as element() ) as element() {
 let $allNodes2 := $allNodes
 for $ret in $allNodes
 where not (some $ret2 in $allNodes2 satisfies $ret2 << $ret and $ret2=$ret)
 return $ret
};


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms