因此,我試圖使用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