Проблемы с получением дочерних узлов с использованием HTMLAgilityPack и XPath - PullRequest
2 голосов
/ 16 января 2012

Я пытаюсь разобрать следующий HTML. Мне нужно получить внутренний текст всех ссылок в теге h4 со значением «Заголовок».

<h4>Title</h4>
    <ul>
         <li>
             <a>One</a>
         </li>
         <li>
             <a>Two</a>
         </li>
         <li>
             <a>Three</a>
         </li>
    </ul>

Я могу получить элемент h4 нормально, используя следующий код:

var links = document.DocumentNode.SelectNodes("//h4[contains(text(),'Title')]");

Проблема возникает при попытке получить узлы a. Я пробовал следующий код, но ни один не работает:

var urls = member.SelectNodes(".//a");

foreach (var url in urls)
{
    Console.WriteLine(url.InnerText);
}

1 Ответ

1 голос
/ 16 января 2012

Из того, что я могу собрать, я думаю, что он не работает, потому что используемый вами xpath ожидает, что узлы a будут дочерними по отношению к вашему узлу h4, я не проверял это, и, возможно, отсутствует интерпретация ваших требований, но...

var links = document.DocumentNode.SelectNodes("//h4[contains(text(),'Title')]/following-sibling::*[1]//a");

Это позволит получить все узлы a, найденные у первого брата узла h4.Итак, в вашем примере HTML он должен получить все узлы в узле ul

Надеюсь, это поможет

...