使用xpath在xquery中获取`fora-distinct`子元素中的$ a

时间:2014-05-22 15:56:25

标签: xml xpath xquery

简单示例:

sample.xml中

<customers>
  <customer>
    <name>Tony</name>
    <order>Burger</order>
    <id>1234</id>
  </customer>
  <customer>
    <name>Kate</name>
    <order>Soda</order>
    <id>5678</id>
  </customer>
</customers

使用XQuery

for $a in distinct-values(doc("sample.xml")/customers/customer)
return
$y

将返回

Tony
Burger
1234

Kate
Soda
5678

但是,如果我这样做:

for $a in distinct-values(doc("sample.xml")/customers/customer)
return
$y/name

要仅返回名称,它会引发错误。有谁能解释为什么?我想访问某些值而不是整个树。同样的事情,如果我尝试用$ y /(某些东西)做任何事情,比如在where表达式中使用它。

更新:我想通过使用distinct-values()作为返回表达式来解决如何绕过我的整体问题但是我仍然困惑为什么我不允许访问distinct-values中的子元素for loops

1 个答案:

答案 0 :(得分:0)

distinct-values()会将输入转换为原子值。这意味着只返回内容,因此xml表示将丢失。

如果你真的想这样做,你可以使用类似自定义函数的东西:functx:distinct-deep:http://www.xqueryfunctions.com/xq/functx_distinct-deep.html

但请记住,在大多数情况下你不想这样做,它也可能对性能非常不利