1
我不能完全弄清楚如何将下面的这两种情况与一个XPath匹配,我尝试过在通配符匹配上进行搜索,但似乎找不到它。是否有可能仅使用一个XPath匹配以下两种情况,还是需要两种情况?XPath通配符匹配不同的路径
有时候是这样的:
tr[@id='someid']/td/ol/li[1]/span/strong/a
其他时候,只是这样的:
tr[@id='someid']/td/ol/li[1]/a
我不能完全弄清楚如何将下面的这两种情况与一个XPath匹配,我尝试过在通配符匹配上进行搜索,但似乎找不到它。是否有可能仅使用一个XPath匹配以下两种情况,还是需要两种情况?XPath通配符匹配不同的路径
有时候是这样的:
tr[@id='someid']/td/ol/li[1]/span/strong/a
其他时候,只是这样的:
tr[@id='someid']/td/ol/li[1]/a
的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)
通过使用
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
第二个(更优雅,更可能更高性能)表达式在XPath 1.0中无效,但可以与Saxon 9一起使用,但我找不到XPath 2.0规范中的语法。你有没有指向这个的指针? – wero
看看[这里](http://www.w3.org/TR/xpath20/#id-primary-expressions),然后看看_ParenthesizedExpr_。如果您可以使用XPath 2而不是XPath 1.0,那将是一大进步;) –