2015-09-28 35 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