Xml 在xquery中使用xpath获取不同值中的'for$a'子元素
简单的例子: sample.xmlXml 在xquery中使用xpath获取不同值中的'for$a'子元素,xml,xpath,xquery,Xml,Xpath,Xquery,简单的例子: sample.xml <customers> <customer> <name>Tony</name> <order>Burger</order> <id>1234</id> </customer> <customer> <name>Kate</name> <order>Sod
<customers>
<customer>
<name>Tony</name>
<order>Burger</order>
<id>1234</id>
</customer>
<customer>
<name>Kate</name>
<order>Soda</order>
<id>5678</id>
</customer>
</customers
会回来的
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()中的子元素,distinct-values()将输入转换为原子值。这意味着只返回内容,因此xml表示将丢失
如果您真的想这样做,可以使用自定义函数:functx:distinct deep:
但请记住,在大多数情况下,您不想这样做,这也可能对性能造成相当大的影响是否有任何方法可以操纵返回内容?还是只能按原样显示?如果不使用自定义功能,是否绝对没有办法做到这一点?如果没有,那么我会使用它,但是肯定有一种不用它们的方法。这取决于你想查询什么。在您显示的查询中,我认为根本不需要不同的值,因为客户应该已经是唯一的了?对于其他情况,您可能希望某个特定值是唯一的,在这种情况下,您可以使用group by等。如果您提供了一些特定示例,那么我们可以向您展示如何最好地查询它。您真的需要不同的值吗?客户是否在xml文档中多次出现?
for $a in distinct-values(doc("sample.xml")/customers/customer)
return
$y/name