如何用 XPath 匹配零个或多个?

How to match zero or more with XPath?

我正在使用 lxml 和 python 如下:

trs = doc.xpath("//div[@id='divGridData']/div[2]/table/tr")
if not trs:
    trs = doc.xpath("//div[@id='divGridData']/div[2]/table/tbody/tr")

所以问题是tbody。我想知道我是否可以将两个 XPath 表达式更改为一个类似 ? in regex.

的表达式

使用or运算符:|如下

"//div[@id='divGridData']/div[2]/table/tr
|
//div[@id='divGridData']/div[2]/table/tbody/tr"

我不知道你的结构 "deep" 怎么样,但是如果你的 table / tbody 元素正下方只有一维的 tr 元素那么您可以将其缩短为:

//div[@id='divGridData']/div[2]/table[./tr | ./tbody]//tr

否则(如果在更深的层次上有一个包含更多 tr 元素的深层结构,而你对此不感兴趣,除了 @hjpotter92 已经给出的解决方案之外,我也不知道任何其他解决方案。

对于 //div[@id='divGridData']/div[2]/table 下的 select tr 元素,无论是否有中间 tbody,请在您的 XPath 中再次使用 //

"//div[@id='divGridData']/div[2]/table//tr"