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

时间:2017-05-23 19:03:12

标签: 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>
  </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>

我期待不仅要提取所有孩子的名字,还要提取特定孩子所属的父母的姓名。

所以我希望能够提取一些让我知道的东西,例如:

  • kid1属于Bob
  • kid6属于Karen

或者,以表格格式:

Parent:  Child:
Bob      kid1
Bob      kid2
Bob      kid3
Karen    kid4
Karen    kid5
Karen    kid6

我知道我可以相当简单地使用XPath提取每个单独的数据元素:

Parents = "/Parents/Parent/@parentname"
Children = "/Parents/Parent/Children/Child/@name"

但是有没有办法同时提取它们所以我可以知道父/子关系,而不必为每个父母的可能性创建多个XPath?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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()函数参数 您可以在此处https://www.freeformatter.com/xpath-tester.html#ad-output

查看此方法