如何用 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"
我正在使用 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"