假设我需要从以下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?
谢谢!
答案 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