這不能用一個XPath 1.0表達式來完成。
可以選擇最是用於@id
給定值設定的p
:2
/*/a/following-sibling::div
[@id=$pId]
/preceding-sibling::p
[count(.
|
/*/a/following-sibling::div
[@id=$pId]
/preceding-sibling::div[1]
/preceding-sibling::p
)
=
count(/*/a/following-sibling::div
[@id=$pId]
/preceding-sibling::div[1]
/preceding-sibling::p
)
+1
]
如果$pId
(通過取代),和上述的XPath表達式應用於此XML文檔上(你的XML片段,包裹在頂部元件,使之良好的XML文檔):
<t>
<a class="random-a-tag"></a>
<p>text1</p>
<p>text1</p>
<p>text1</p>
<div id="1"></div>
<p>text2</p>
<p>text2</p>
<p>text2</p>
<div id="2"></div>
<p>text3</p>
<p>text3</p>
<p>text3</p>
<div id="3"></div>
</t>
那麼這個選擇下列節點:
<p>text2</p>
<p>text2</p>
<p>text2</p>
在我們使用的公知的Kayessian(由@邁克爾凱創建)公式節點集合相交上述XPath表達式:
$ns1[count(.|$ns2) = count($ns2)]
是節點集$ns1
和$ns2
的交叉點。
二,的XPath 2.0溶液:
(a/following-sibling::div
[@id=$pId]
/preceding-sibling::p
except
a/following-sibling::div
[@id=$pId]
/preceding-sibling::div[1]
/preceding-sibling::p
)/string()
當這個XPath 2.0表達式與相同的XML文檔(上述)評估和$pId
爲2,則結果是完全所需文本:
text2 text2 text2