无法检索 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]");

无法检索 html 列表中的第三个 td 节点

我正在尝试获取文本"非常好的乡村景色"和"良好"

您必须选择 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;