Xml 如何在项目的以下节点中找到非重复和非反转的值对?
到目前为止,通过对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
<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>