HtmlAgilityPack не может найти определенный td

c# html-agility-pack xpath

Вопрос

Мне нужно извлечь значение только одного определенного td из таблицы с помощью XPath, но код всегда возвращает значение null. Как я могу это исправить?

var location = GetLocation(document.Result.DocumentNode.SelectSingleNode("//*[@id='detailTabTable']/tbody/tr[3]/td[2]"));

и код

private string GetLocation(HtmlNode h)
        {
            try
            {
                string location = null;
                if (h == null)
                {
                    location = "N/A";
                }
                else
                {
                    location = h.InnerText;
                    location = location.Substring(0, location.IndexOf(",", StringComparison.InvariantCulture));
                }
                return location;
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error in Link Data Repository {0} in Parse Links {1}", ex.Message, ex.StackTrace);
                throw new Exception(ex.Message);
            }
        }

И небольшая простая таблица:

       <table id="detailTabTable" width="99%" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td class="detailTabContentLt">Current List Price:</td>
                <td class="detailTabContentPriceRt">
                  <span class="aiDetailCurrentPrice">AED 6,600,000</span>
                </td>
            </tr>
            <tr>
                <td class="detailTabContentLt" style="white-space: nowrap;">Plot size (Sq. Ft.):</td>
                <td class="detailTabContentRt">N/A</td>
            </tr>
            <tr>
                <td class="detailTabContentLt" valign="top">Locality</td>
                <td class="detailTabContentRt">Dubai, Dubai</td>
            </tr>
            <tr>
                <td colspan="2"></td>
            </tr>
        </table>

Популярные ответы

Я только что проверил ваш код. Как упоминалось в комментариях, когда вы удаляете tbody из вашего выражения xpath, все работает отлично. Это сработало для меня.

private static void htmlAgilityPackTest()
{
    string html = " <table id=\"detailTabTable\" width=\"99%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td class=\"detailTabContentLt\">Current List Price:</td><td class=\"detailTabContentPriceRt\"><span class=\"aiDetailCurrentPrice\">AED 6,600,000</span></td> </tr><tr> <td class=\"detailTabContentLt\" style=\"white-space: nowrap;\">Plot size (Sq. Ft.):</td><td class=\"detailTabContentRt\">N/A</td></tr> <tr><td class=\"detailTabContentLt\" valign=\"top\">Locality</td> <td class=\"detailTabContentRt\">Dubai, Dubai</td> </tr> <tr><td colspan=\"2\"></td> </tr>  </table>";
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
    document.LoadHtml(html);

    var node = document.DocumentNode.SelectSingleNode("//*[@id='detailTabTable']/tr[3]/td[2]");
    string location = GetLocation(node);
    Console.WriteLine("Location: " + location);
}

В случае, если я неправильно понял, пожалуйста, дайте мне знать.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow