Проблемы с получением childNodes с использованием HTMLAgilityPack и XPath

c# html-agility-pack xpath

Вопрос

Я пытаюсь проанализировать следующий 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')]");

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

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

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

Принятый ответ

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

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

Это позволит получить все узлы, которые находятся в первом родстве узла h4. Поэтому в вашем примере HTML он должен получить все узлы в узле ul

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



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему