2012-12-07 42 views
2

我可以使用.//div/h1/text() | .//div/h2/text()來選擇幾條路徑。不過,我想知道是否有一種方法可以在沒有明確寫出每條路徑都通用的部分的情況下進行 - 在這種情況下,每次都是.//div/使用x-path「|」運算符

+1

如果你問的問題XPAT h,你真的需要說出你是否對XPath 1.0或2.0感興趣,因爲答案通常是不同的,並且這兩個版本都被廣泛使用。 –

回答

2

至於使用XPath 2.0的快捷鍵,您可以縮短例如//div/h1 | //div/h2至例如//div/(h1 | h2)但在XPath 1.0中不允許使用該語法。我認爲XPath 3.0會引入一個let子句來定義變量。所以我認爲你可以做let $r := /html/body/div[3]/table[2]/tbody/tr[5] return ($r/span | $r/a)

或者對於XPath 2.0的更正樣本,您可以將.//div/h1/text() | .//div/h2/text()縮短爲.//div/(h1/text() | h2/text())。但使用XPath 1.0,您只能使用.//div/*[self::h1 | self::h2]/text()

+0

糾正了錯誤 - 表達意思是不同的。感謝您的解釋。 – root

0

.//div/*[(local-name() = 'h1') or (local-name() = 'h2')]/text()

應該做的伎倆

0

使用

.//div/*[self::h1 or self::h2]/text() 

在XPath 2.0可以使用

.//div/(h1|h2)/text()