因此,我试图使用XPath(1.0)来获取某个类型的所有元素,而这些元素本身或任何祖先都具有特定的参数值。诀窍是该参数可以是一个值列表,所以我不能只查找@ parameter ='value'。这是我的情况下文档的一个例子,比方说我在寻找外部参照元素这其中一方或任何其祖先有平台=“手机”:XPath祖先或自我解析命令
<doc>
<block>
<xref platform="mobile desktop">1</xref>
</block>
<block platform="mobile">
<xref platform="desktop">2</xref>
</block>
<block platform="desktop">
<xref platform="mobile">3</xref>
</block>
</doc>
我(有一些帮助)想出了以下XPath似乎几乎使它:
//xref[contains(concat(' ', normalize-space(ancestor-or-self::*/@platform), ' '), ' mobile ')]
我们的目标是为CONCAT在同一时间串联平台的所有值外部参照的祖先和自己,再看看手机是在那里。所以在示例文档中,它应该返回所有3个外部参照,但它不会,它会省略第3个外部参照。我认为祖先或自我从根层面下来评估,所以一旦发现一个不移动的平台,它就会失败,而不会实际检查其他的祖先或自我。再加上这种行为,concat并没有做任何事情,因为它只是一次查看一个节点的平台值。
有谁知道如何解决这个特殊情况?
谢谢,这正是我一直在寻找的!我知道我曾经尝试过类似的东西,所以我翻遍了我的尝试,发现了一个就像这样,但在*之后有一个/所以它不起作用。说实话,我没有理解,知道为什么/不应该在那里,但谢谢! –
@AndresMata欢迎您!我认为它是:predicate('[[...]')需要一个上下文节点来应用,而上下文是左边的节点。因此'/ [...]'从来不是正确的语法,因为除了路径分隔符外,谓词的左边没有任何东西,与'/ ancestor-or-self :: * [...]对比' 'ancestor-or-self :: *'是谓词的上下文 – har07