Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在xquery中使用xpath获取不同值中的'for$a'子元素_Xml_Xpath_Xquery - Fatal编程技术网

Xml 在xquery中使用xpath获取不同值中的'for$a'子元素

Xml 在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

简单的例子:

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
会回来的

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