是否有可能寫的Xpath exression找到以下節點:的XPath:具有相同名稱的嵌套節點
a/b/c
a/b/b/c
a/b/b/b/c
a/b/b/b/.../b/.../b/c
等
但不
a/b/b/e/b/c
?
感謝您的任何意見
是否有可能寫的Xpath exression找到以下節點:的XPath:具有相同名稱的嵌套節點
a/b/c
a/b/b/c
a/b/b/b/c
a/b/b/b/.../b/.../b/c
等
但不
a/b/b/e/b/c
?
感謝您的任何意見
對於以下輸入:
<root>
<a><b><c>1</c></b></a>
<a><b><b><c>2</c></b></b></a>
<a><b><b><b><c>3</c></b></b></b></a>
<a><b><b><e><b><c>4</c></b></e></b></b></a>
<a><b><b><e><b><b><c>5</c></b></b></e></b></b></a>
</root>
你可以試試下面的表達式:
//a[deep-equal(distinct-values(descendant::*[position()<last()]/name()), ('b'))]//c
它是如何工作的:
對於任何a
除了最後一個後代以外的所有名字都被計算出來,並且檢查該名字的不同列表是否與只包含b
的列表匹配。而對於這樣的a
後裔c
是你想要選擇的。
我用2010版XMLSpy測試了它,它返回了包含1,2和3的c
元素。我認爲更現代的工具也可以工作。但你至少需要XPath 2.0。
它的工作原理!謝謝! – Denis
你是指類似於正則表達式「ab + c」的東西? – ceving
我不認爲你可以單獨使用xpath來實現這一點。您的要求似乎表明最終結果不應包含'e',在這種情況下,您應該使用xslt轉換xml以刪除'e',並且您可以在其上運行xpath。 – SomeDude
@ceving準確 – Denis