无法检索 html 列表中的第三个 td 节点
本文关键字:三个 节点 td 检索 html 列表 | 更新日期: 2023-09-27 18:30:18
我正在尝试使用HTMLAgilityPack获取文本"非常好的国家视图"和"良好"。
<div class="property-details-section">
<h5><span id="content_lblFurtherDetails">Further Details</span></h5>
<ul id="features">
<li style="display:block;">
<table border="0" cellpadding="0" cellspacing="0" width="500">
<tr>
<td style="width: 15px;">
<img src="../images/bullet.png" alt="bullet" />
</td>
<td style="width: 185px;">Views</td>
<td style="width: 300px;">Very Good Country views</td>
</tr>
</table>
</li>
</ul>
<li style="display:block;">
<table border="0" cellpadding="0" cellspacing="0" width="500">
<tr>
<td style="width: 15px;">
<img src="../images/bullet.png" alt="bullet" />
</td>
<td style="width: 185px;">Finish</td>
<td style="width: 300px;">Good</td>
<tr>
</table>
</li>
</div>
我尝试了以下"非常好的乡村景观",但没有成功:
HtmlNode text =
doc.DocumentNode.SelectSingleNode("//ul[@id='features']/li/table/tr/td[3]");
我正在尝试获取文本"非常好的乡村景色"和"良好"
您必须选择 2 个元素,因此如果您想立即获得结果,您应该使用 SelectNode 而不是 SelectSingleNode。
var result = doc.DocumentNode.SelectNodes("//ul[@id='features']/li/*//td[last()]")
.Select(td => td.InnerText)
.ToList();
我认为关于您的XPath
的问题在于您应该在表达式周围添加括号:
var text = doc.DocumentNode
.SelectSingleNode("(//ul[@id='features']/li/table/tr/td)[3]");
您也可以尝试使用LINQ
:
var td = doc.Descendants("ul")
.First(x => x.GetAttributeValue("id","") == "features")
.Descendants("td")
.Skip(2)
.First();
var text = td.InnerText;