如何在同一XPath表达式中获取两个表格的行?(HtmlAgilityPack场景)
解决HtmlAgilityPack获取指定容器内表格行的问题
你的问题出在XPath的路径写法上!当你在main.SelectNodes("//table//tr")里用//开头时,它是从整个文档的根节点开始搜索,而不是限定在main这个节点的范围内,所以自然会返回文档中所有的<tr>元素。
要只获取main container下两个表格里的行,只需要把XPath改成相对路径即可,也就是在开头加上一个点.,表示从当前节点(也就是main)开始向下搜索:
HtmlNode main = doc.DocumentNode.SelectSingleNode("//div[@class='main container']"); HtmlNodeCollection rows = main.SelectNodes(".//table//tr");
额外的精确写法(可选)
如果你想更精准地限定在left和right这两个div下的表格,也可以用更具体的XPath,避免意外匹配到其他可能存在的表格:
HtmlNodeCollection rows = main.SelectNodes(".//div[@class='left' or @class='right']//table//tr");
这样就只会获取main节点下class为left或right的div内部表格里的所有行啦。
内容的提问来源于stack exchange,提问作者cojac
相关产品推荐
相关产品推荐

