2015-09-28 34 views
1

我不能完全弄清楚如何將下面的這兩種情況與一個XPath匹配,我嘗試過在通配符匹配上進行搜索,但似乎找不到它。是否有可能僅使用一個XPath匹配以下兩種情況,還是需要兩種情況?XPath通配符匹配不同的路徑

有時候是這樣的:

tr[@id='someid']/td/ol/li[1]/span/strong/a 

其他時候,只是這樣的:

tr[@id='someid']/td/ol/li[1]/a 

回答

2

的XPath 1:

tr[@id='someid']/td/ol/li[1]/a | tr[@id='someid']/td/ol/li[1]/span/strong/a 

的XPath 2:

tr[@id='someid']/td/ol/li[1]/(a | span/strong/a) 
+0

第二個(更優雅,更可能更高性能)表達式在XPath 1.0中無效,但可以與Saxon 9一起使用,但我找不到XPath 2.0規範中的語法。你有沒有指向這個的指針? – wero

+0

看看[這裏](http://www.w3.org/TR/xpath20/#id-primary-expressions),然後看看_ParenthesizedExpr_。如果您可以使用XPath 2而不是XPath 1.0,那將是一大進步;) –

2

通過使用

tr[@id='someid']/td/ol/li[1]/span/strong/a | tr[@id='someid']/td/ol/li[1]/a 

,你可以在一個查詢中選擇兩條路徑。

如果你想.../li[1]下的所有/a -elements,您還可以使用

tr[@id='someid']/td/ol/li[1]//a 

(注意末尾的雙斜槓)。來源:W3Schools