如果可能,我想使用單個XPath表達式查找節點的所有緊鄰兄弟。給定了輸入如何使用XPath查找所有緊鄰的兄弟姐妹
<a id="1"/>
<start/>
<a id="2"/>
<a id="3"/>
<b/>
<a id="4"/>
並且類似於//start/following-sibling::a
XPath表達式,我想選擇一個[2],和一個[3],但不是一個[4]。此外,如果開始和a [2]之間有任何介入元素,則不應選擇任何內容。
如果可能,我想使用單個XPath表達式查找節點的所有緊鄰兄弟。給定了輸入如何使用XPath查找所有緊鄰的兄弟姐妹
<a id="1"/>
<start/>
<a id="2"/>
<a id="3"/>
<b/>
<a id="4"/>
並且類似於//start/following-sibling::a
XPath表達式,我想選擇一個[2],和一個[3],但不是一個[4]。此外,如果開始和a [2]之間有任何介入元素,則不應選擇任何內容。
最簡單的一個我能找到的是:
//start/following-sibling::a intersect //start/following-sibling::*[name()!='a'][1]/preceding-sibling::a
這樣做是:
start
所有a
兄弟姐妹://start/following-sibling::a
。 (結果:a2,a3,a4。)現在將其設置爲一側。start
的第一個非兄弟姐妹://start/following-sibling::*[name()!='a'][1]
(結果:B)a
節點:/preceding-sibling::a
。 (結果:A1,A2,A3)更新:另一種方法短語是//start/following-sibling::*[name()!='a'][1]/preceding-sibling::a[preceding-sibling::start]
,這大致翻譯爲:採取第一個非兄弟姐妹start
,向後倒數,但只選擇仍然在前面的元素start
。
更新2:如果你知道b
將永遠被稱爲b
,當然你也可以更換,而難以閱讀following-sibling::*[name()!='a'][1]
部分與following-sibling::b[1]
。
謝謝!您的**更新**中的方法完美。必須在我的XPath技能上工作...... – svenax 2014-10-09 20:12:49