这可能是一个棘手的问题,尽管我对XPath并不熟悉。几天来我的脑子一直在ra ra。 我试图提取从一个XML文件的某些元件以创建一个表,从中我然后需要通过对extractValue提取单个值:XPath查询从XML中提取信息
SELECT [extractValue statements] FROM TABLE(XMLSequence(extract(lv_xml, lv_xpath))) t;
在该表(一列)的每行应包含一个片段XML所在元素的出现次数不超过一次。它的父节点也应该被提取到表中。问题是,在XML源代码中,所需的元素可能有同样符合我的要求的兄弟。我需要兄弟姐妹在结果表中以单独的行结束。
的XML类似于这样(只是多了很多内容,并以不同的ID):
<element id="Address">
<assignment name="name1" category="cat1" />
<field id="field1">
</field>
<field id="field2">
</field>
<field id="field3">
<assignment name="name5" category="cat2" />
<assignment name="name12" category="cat2" />
</field>
</element>
<element id="PersonInfo">
<field id="field1">
</field>
<field id="field2">
<assignment name="name17" category="cat1" />
</field>
<field id="field3">
</field>
<field id="field4">
</field>
</element>
etc etc
我想要的“任务”的元素,再加上他们的祖先。但正如我上面所说的,我的restults表不能在每行中包含多个“赋值”元素。到目前为止,我试过的东西似乎是提取了很多,如果其中两个是兄弟姐妹。 除此之外,'赋值'可以是'元素'的孩子或'场'的孩子,这可能会增加复杂性。
要实现100%清楚,我的结果需要看起来像这样(为了使后续extractValue一起工作):
<element id="Address">
<assignment name="name1" category="cat1" />
</element>
<element id="Address">
<field id="field3">
<assignment name="name5" category="cat2" />
</field>
</element>
<element id="Address">
<field id="field3">
<assignment name="name12" category="cat2" />
</field>
</element>
<element id="PersonInfo">
<field id="field2">
<assignment name="name17" category="cat1" />
</field>
</element>
我已经与XPath查询玩耍,但没有运气远。我期待
//assignment/ancestor-or-self::*
可能会做的伎俩,但我显然是错的。有没有办法达到我想要的?
因此,每个条目都有最顶层的父元素:'element'? – Neijwiert
感谢您的评论 - 是的。始终存在。有时存在,但并非总是如此。 –
Amalia
您可以使用XSLT吗? – Neijwiert