Xml 提取XPath中的部分路径以显示提取的值';亲子关系

Xml 提取XPath中的部分路径以显示提取的值';亲子关系,xml,xpath,Xml,Xpath,假设我需要从以下XML中提取数据: <Parents> <Parent id="1" parentname="Bob"> <Children> <Child id="1" name="kid1" /> <Child id="2" name="kid2" /> <Child id="3" name="kid3" /> </Children> </Pa

假设我需要从以下XML中提取数据:

<Parents>
  <Parent id="1" parentname="Bob">
    <Children>
      <Child id="1" name="kid1" />
      <Child id="2" name="kid2" />
      <Child id="3" name="kid3" />
    </Children>
  </Parent>
  <Parent id="2" parentname="Karen">
    <Children>
      <Child id="4" name="kid4" />
      <Child id="5" name="kid5" />
      <Child id="6" name="kid6" />
    </Children>
  </Parent>
</Parents>
我知道我可以使用XPath非常简单地提取这些单独的数据元素,大致如下:

Parents = "/Parents/Parent/@parentname"
Children = "/Parents/Parent/Children/Child/@name"
但是有没有办法同时提取它们,这样我就可以知道父/子关系,而不必为每个父可能性创建多个XPath


谢谢

使用
for
循环遍历所有
子节点,保留对当前
父节点的引用:

for $p in Parents/Parent
return $p/Children/Child/concat("parent: ", $p/@parentname, "; child: ", @name)
输出:

parent: Bob; child: kid1
parent: Bob; child: kid2
parent: Bob; child: kid3
parent: Karen; child: kid4
parent: Karen; child: kid5
parent: Karen; child: kid6

您可以根据需要调整
concat()
函数参数。

您可以在这里检查这种方法

我没有任何线索表明您可以在XPath中这样进行变量命名/循环只是很棒的新知识谢谢你@约翰布斯托斯,不客气。我应该提到
for
循环是XPath2.0特性库,我注意到。。。似乎很少有XPath工具允许使用它,但无论如何,我的.Net代码都需要它。我得看看它是怎么运作的。再次感谢,因为这正是我想要的!
parent: Bob; child: kid1
parent: Bob; child: kid2
parent: Bob; child: kid3
parent: Karen; child: kid4
parent: Karen; child: kid5
parent: Karen; child: kid6