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,未經測試) –