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

时间:2014-11-12 20:59:12

标签: c# html-agility-pack

我正在努力获取文字"非常好的国家观点"和#34;好"使用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>

我已经尝试了以下#34;非常好的国家观点&#34;没有成功:

HtmlNode text =
    doc.DocumentNode.SelectSingleNode("//ul[@id='features']/li/table/tr/td[3]");

2 个答案:

答案 0 :(得分:1)

  

我正在努力获取文字&#34;非常好的国家观点&#34;和#34;好&#34;

您必须选择2个元素,因此如果您想立即获得结果,则应使用 SelectNodes 而不是 SelectSingleNode

var result = doc.DocumentNode.SelectNodes("//ul[@id='features']/li/*//td[last()]")
                .Select(td => td.InnerText)
                .ToList();

答案 1 :(得分:0)

我认为您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;