Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.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
Xquery返回多个值,而不是一个值_Xquery - Fatal编程技术网

Xquery返回多个值,而不是一个值

Xquery返回多个值,而不是一个值,xquery,Xquery,考虑xml文件: <warehouse> - may be some tag on upper level of dep present, may be not <dep no ="2"> <item> <itemName> Item 1 </itemName> <supplier> Supp1 </supplier> <supplier> S

考虑xml文件:

<warehouse>
- may be some tag on upper level of dep present, may be not
<dep no ="2">
    <item>
        <itemName> Item 1  </itemName>
        <supplier> Supp1 </supplier>
        <supplier> Supp2 </supplier>
    </item>
</dep>
<dep no ="1">
    <item>
        <itemName> Item 2  </itemName>
        <supplier> Supp1 </supplier>
        <supplier> Supp3 </supplier>
    </item>
</dep>
.......
</warehouse>
这是我的代码:

<ul>
{
for $sup in distinct-values(doc("warehouse.xml")//supplier)
for $item in doc("warehouse.xml")//item[supplier = $sup]

return <li>{data($sup)} <ul> {
let $n:= $item/itemName
let $y:= doc("warehouse.xml")//dep[//itemName=$n]/@no 
for $n1 in $n return <li>{data($n1), data($y)} </li>} </ul> </li>
}
</ul>
我明白了


你能告诉我可能出了什么问题吗?非常感谢。

作为XQuery的新手,我可以写以下内容

输入:

<warehouse>
  <something/>
  <dep no ="2">
    <item>
      <itemName>Item1</itemName>
      <supplier>Supp1</supplier>
      <supplier>Supp2</supplier>
    </item>
  </dep>
  <anything/>
  <dep no ="1">
    <item>
      <itemName>Item2</itemName>
      <supplier>Supp1</supplier>
      <supplier>Supp3</supplier>
    </item>
  </dep>
  <whatever/>
</warehouse>
  • 在此之后,您希望列出与给定供应商关联的每个项目:

    $doc//item[supplier/text() = $supplier]/itemName/text()
    
    这意味着您获取输入中供应商名称等于给定供应商名称的每个项目,然后获得这些(过滤)项目的名称


  • 就这样。希望我有点道理

    非常感谢你的答复。我用的是氧气,这里似乎没有定义“组别”。()有什么建议吗?@PiotrL。哦,是的,这在XQuery 3.0中是一个很好的额外定义。您的XQuery处理器似乎还不支持它。我已经更新了我的答案,所以它不使用此功能。
    Supp1
     Item1, 1,2, ...
    Supp1
     Item2, 1,2, ...
    
    <warehouse>
      <something/>
      <dep no ="2">
        <item>
          <itemName>Item1</itemName>
          <supplier>Supp1</supplier>
          <supplier>Supp2</supplier>
        </item>
      </dep>
      <anything/>
      <dep no ="1">
        <item>
          <itemName>Item2</itemName>
          <supplier>Supp1</supplier>
          <supplier>Supp3</supplier>
        </item>
      </dep>
      <whatever/>
    </warehouse>
    
    <ul>{
    (: the ../text() can be dropped from everywhere :)
    let $doc := doc("input.xml")    
    for $supplier in distinct-values($doc//supplier/text())
    let $items := $doc//item[supplier/text() = $supplier]/itemName/text()
    return <li>{$supplier}: {string-join($items, ", ")}</li>
    }</ul>
    
    <ul>
      <li>Supp1: Item1, Item2</li>
      <li>Supp2: Item1</li>
      <li>Supp3: Item2</li>
    </ul>
    
    distinct-values($doc//supplier/text())
    
    $doc//item[supplier/text() = $supplier]/itemName/text()