Xml 如何在项目的以下节点中找到非重复和非反转的值对?

Xml 如何在项目的以下节点中找到非重复和非反转的值对?,xml,web-scraping,xquery,Xml,Web Scraping,Xquery,到目前为止,通过对xml文件的查询,我得到了以下结果 <results> <project> <pnumber>1</pnumber> <workers> <essn>123456789</essn> <essn>453453453</essn> </workers> </project> <pro

到目前为止,通过对xml文件的查询,我得到了以下结果

<results>
  <project>
    <pnumber>1</pnumber>
    <workers>
      <essn>123456789</essn>
      <essn>453453453</essn>

    </workers>
  </project>
  <project>
    <pnumber>2</pnumber>
    <workers>
      <essn>123456789</essn>
      <essn>333445555</essn>
      <essn>453453453</essn>
    </workers>
  </project>
  ...

1.
123456789
453453453
2.
123456789
333445555
453453453
...
等6个项目(pnumber)。我需要为每个项目的值找到essn的成对值,并为工人列出它们。结果中不能有重复对或反向对

在确定哪些对是不同的之后,Iv尝试修改下面的不同值以显示对

let $items := (1,2,4,4,5,5)
let $unique-items := distinct-values($items)
return
   <result>   

      <items>
      {
         for $item in $unique-items
         return <item>{$item}</item>
      }
      </items>


   </result>
let$items:=(1,2,4,4,5,5)
让$unique items:=不同的值($items)
返回
{
对于$unique items中的$item
返回{$item}
}
我只是得到集合中唯一的值

我用这个来达到我现在的状态

<results>
  {
    for $project in doc("../company/project.xml")//project
    where $project/pnumber=*
    return
     <project>
      {$project/pnumber}
       {  
              let $works_on := doc("../company/works_on.xml")//works_on[pno = $project/pnumber]
              return
             <workers>
              {$works_on/essn}
                  </workers>
      } 
     </project>   
  }
</results>

{
对于文档中的$project(“../company/project.xml”)//project
其中$project/pnumber=*
返回
{$project/pnumber}
{  
让$works\u on:=doc(“../company/works\u on.xml”)///works\u on[pno=$project/pnumber]
返回
{$works_on/essn}
} 
}
结果应该是这样的

<results>
  <project>
    <pnumber>1</pnumber>
    <workers>
      <pair1>
      <essn>123456789</essn>
      <essn>453453453</essn>
      </pair1>
    </workers>
  </project>
  <project>
    <pnumber>2</pnumber>
    <workers>

      <pair1>
      <essn>123456789</essn>
      <essn>333445555</essn>
       </pair1>

      <pair2>
      <essn>453453453</essn>
      <essn>333445555</essn>
       </pair2>

       <pair3>

       <essn>123456789</essn>
       <essn>453453453</essn>

        </pair3>

    </workers>
  </project>
  ...

1.
123456789
453453453
2.
123456789
333445555
453453453
333445555
123456789
453453453
...

对于给定的示例数据,我认为查询

<results>
{
    for $project in results/project
    return
        <project>
        {
            $project/pnumber,
            <workers>
            {
                for $worker at $pos in $project/workers/essn
                for $other-worker in $project/workers/essn[position() gt $pos]
                count $p
                return
                    <pair index="{$p}">
                    {
                        $worker,
                        $other-worker
                    }
                    </pair>
            }
            </workers>
        }
        </project>
}
</results>

{
对于结果/项目中的$project
返回
{
$project/P编号,
{
对于$project/workers/essn中$pos处的$worker
对于$project/workers/essn中的$other worker[职位()gt$pos]
数一数$p
返回
{
$worker,
$其他工人
}
}
}
}
在上创建正确的对

我不确定不重复数据的要求是否不是您想要的步骤,或者至少可以通过替换来确保

let $works_on := doc("../company/works_on.xml")//works_on[pno = $project/pnumber]
          return
         <workers>
          {$works_on/essn}
              </workers>
let$works\u on:=doc(“../company/works\u on.xml”)///works\u on[pno=$project/pnumber]
返回
{$works_on/essn}

let$works\u on:=不同的值(doc(“../company/works\u on.xml”)///works\u on[pno=$project/pnumber]/essn)
返回
{.}
“结果中不能有重复对或反向对”是关于输入数据外观的语句吗?或者对要创建的输出的要求?如果您使用更简单的示例数据,我们理解问题的任务也会更轻松。我很难确定
453453
453453
是重复值还是唯一值。还要考虑告诉我们你使用的XQuery版本。
 let $works_on := distinct-values(doc("../company/works_on.xml")//works_on[pno = $project/pnumber]/essn)
          return
         <workers>
            <essn>{.}</essn>
          </workers>