0
由于这个问题的范围之外的原因,我需要能够处理同一结构但属于不同名称空间的多个xml文档(don'请问)。XPath - 使用local-name()时根据兄弟节点的值选择一个节点
要做到这一点,我变得非常习惯使用像我的许多价值选择以下的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,将选择一个格兰尼史密斯苹果的味道。虽然我通常会做这样的事情:
//apple[kind/text()='Granny Smith']/flavor/text()
我无法弄清楚如何合并利用当地名的概念()是不可知的命名空间,同时还选择基于兄弟姐妹的值的节点。
简而言之,无论输入fruit xml文档属于哪个命名空间,返回“tart”所需的xpath是什么?
我并不完全确定自己明白,但//*[contains(.,'tart')]是我认为你正在寻找的东西。更具体地说,虽然:// apple [contains(@flavor,'tart')]会返回有问题的苹果,假设有其他的水果也可能具有标记名味儿。 –
我想要这个xpath的等价物,这个名称空间是无知的,并且可以用于任何水果xml,而不管它属于哪个名称空间(只要结构在上面):// apple [kind/text()='Granny Smith']]/flavor/text()让我们假设我们不知道什么味道是为了参数 – Russ
我想我现在明白了。我可以告诉你,如果它有帮助,我将如何在Java中实现它:“// * [local-name()='type']/* [local-name()='property'] /../ name )= '输出'] /文本()”。替换( “类型”, “苹果属性 ” “类型的输出 ” “味道”)“)替换(”。“)替换(”; (air-code,未经测试) –