由于超出此问题范围的原因,我需要能够处理多个具有相同结构但属于不同命名空间的xml文档(不要问)。
为了实现这一点,我已经习惯于在我的许多价值选择中使用如下所示的xpath:
//*[local-name()='apple']/*[local-name()='flavor']/text()"
我对谓词的理解不足使我无法根据兄弟节点的值选择节点的值。请考虑以下xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<fruit>
<apple>
<kind>Red Delicious</kind>
<flavor>starchy</flavor>
</apple>
<apple>
<kind>Granny Smith</kind>
<flavor>tart</flavor>
</apple>
<apple>
<kind>Pink Lady</kind>
<flavor>sweet</flavor>
</apple>
</fruit>
让我们说我想写一个xpath来选择Granny Smith苹果的味道。虽然我通常会这样做:
//apple[kind/text()='Granny Smith']/flavor/text()
我无法弄清楚如何将仍然使用local-name()的概念合并为名称空间无关,同时仍然根据兄弟的值选择一个节点。
简而言之,返回&#34; tart&#34;所需的xpath是什么?无论输入水果xml文档属于哪个命名空间?
答案 0 :(得分:0)
我需要能够处理多个相同的xml文档 结构但属于不同的命名空间(不要问)
我首选的方法是首先将数据转换为使用单个命名空间,然后进行适当的转换。这样做(a)使实际转换更加简单,(b)将所有命名空间转换逻辑放在一个地方,(c)使命名空间转换逻辑可重用 - 无论数据如何随后都可以使用相同的转换使用。