如何使用XPath匹配零个或多个内容?

3

我正在使用Python的lxml库,代码如下:

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

所以问题出在上。我想知道是否可以用类似于正则表达式中的?将这两个XPath表达式合并为一个。
3个回答

3

使用或运算符:|如下:

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

1
要选择位于//div[@id='divGridData']/div[2]/table下的tr元素,无论是否有tbody,在XPath中再次使用//即可:
"//div[@id='divGridData']/div[2]/table//tr"

0

我不知道你的结构有多“深”,但如果在你的table / tbody元素下面只有一个维度的tr元素,那么你可以将其缩短为:

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

否则(如果存在更深层次的具有更多 tr 元素的深层结构,而你对其不感兴趣),那么我也不知道除了@hjpotter92已经提供的解决方案之外的其他解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接