Как вывести отдельные теги<p>с помощью HTML Agility Pack в расширенное текстовое поле?

Я только учусь, как использовать HTML Agility Pack для удаления текста с веб-страниц. Я ищу, чтобы получить биографии героев в Overwatch от Blizzard с их сайта. В настоящее время я использую это, чтобы найти и записать нужный текст в поле расширенного текста.

var paragraphs = page.DocumentNode.SelectNodes("//div[@class='hero-bio-backstory pad-sm']");

     foreach(HtmlNode node in paragraphs)
     {
         rchTxtBox.AppendText(node.InnerText);
         rchTxtBox.AppendText("\n");
     }

Я пытаюсь получить InnerText каждого

с обратной строкой между ними.

<div class="hero-bio-backstory pad-sm"> == $0
     <p>...</p>
     <p>...</p>
     <p>...</p>
     <p>...</p>
</div>

Вместо того, чтобы выводить каждый абзац с возвращаемым символом между ними, он записывает их все в один сплошной блок. Есть ли способ сделать это?

1 ответ

Решение

Ваш селектор //div[@class='hero-bio-backstory pad-sm'] возвращает один узел - весь div, Когда вы тогда позвоните InnerText на этом узле он возвращает текст всей разметки div без разметки. Поэтому вы видите поведение, которое вы описываете: ваш цикл запускается один раз, добавляет весь текст в один фрагмент, а затем добавляет один завершающий символ новой строки.

Вам нужно использовать выражение XPath, которое выберет все p узлы, т.е. //div[@class='hero-bio-backstory pad-sm']/p,

Другие вопросы по тегам