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-恢复父节点的查询_Xml_Xpath_Xquery - Fatal编程技术网

Xml xquery-恢复父节点的查询

Xml xquery-恢复父节点的查询,xml,xpath,xquery,Xml,Xpath,Xquery,我有一个xml文件: <EV id="000" age="10"> <specie cod="e00"/> <acc child="002"/> </EV> <EV id="001" age="12"> <specie cod="e01"/> <acc child="002"/> </EV> <EV id="002" age="2"> <specie

我有一个xml文件:

<EV id="000" age="10">
   <specie cod="e00"/> 
   <acc child="002"/>
</EV>
<EV id="001" age="12">
   <specie cod="e01"/> 
   <acc child="002"/>
</EV>
<EV id="002" age="2">
   <specie cod="e00"/> 
   <acc/>
</EV>
<EV id="003" age="30">
   <specie cod="e00"/> 
   <acc child="005"/>
</EV>
<EV id="004" age="20">
   <specie cod="e00"/> 
   <acc child="005"/>
</EV>
<EV id="005" age="5">
   <specie cod="e00"/> 
   <acc/>
</EV>

现在,我必须打印标签中其他两个标签(父标签)中出现的标签属性@id(我项目的子标签),但这两个标签(父标签)必须使标签中的属性@cod不同。另一个条件是,父母双方的年龄差异小于5岁(10岁和12岁为好,20岁和30岁为否)

上面的xml示例:xquery必须只打印id=“002”


感谢您的帮助。

这是一个大量使用谓词的版本:

for $e in /EV
return $e[count(distinct-values(../EV[acc/@child = $e/@id]/specie/@cod)) = 2][abs(../EV[acc/@child = $e/@id][1]/@age - ../EV[acc/@child = $e/@id][2]/@age) < 5]
用于每辆电动汽车$e
返回$e[count(不同值(../EV[acc/@child=$e/@id]/specie/@cod))=2][abs(../EV[acc/@child=$e/@id][1]/@age-../EV[acc/@child=$e/@id][2]/@age)<5]
但是,我可能更喜欢可读性更强的版本:

for $parent in /EV
let $childs := $parent/../EV[acc/@child = $parent/@id]
where
  count(distinct-values($childs/specie/@cod)) = 2
  and
  abs($childs[1]/@age - $childs[2]/@age) < 5
return $parent
用于$parent in/EV
让$childs:=$parent/./EV[acc/@child=$parent/@id]
哪里
计数(不同值($childs/specie/@cod))=2
和
abs($childs[1]/@age-$childs[2]/@age)<5
返回$parent

是的,标签“children”总是有两个父母。/@id/data之后是什么(?谢谢你的回答,明天我试试。@LocalHero抱歉,我没有复制结束语。你的解决方案很好@dirkk,谢谢:)有可能添加这个最终条件吗?“另一个条件是,两位家长的年龄差异小于5岁(10岁和12岁为好,20岁和30岁为否)。”我已使用属性age编辑了原始消息和xml文件。谢谢你的帮助。