我正在学习如何使用HTML Agility Pack从网页中删除文本。我希望从他们的网站上获取暴雪的Overwatch中的英雄传记。我目前正在使用它来查找所需文本并将其写入富文本框。
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。 p>他们之间有一条回程线。
<div class="hero-bio-backstory pad-sm"> == $0
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
</div>
它不是输出每个段落之间的返回字符,而是将所有段落写入一个实体块。有没有办法做到这一点?
答案 0 :(得分:1)
您的选择器//div[@class='hero-bio-backstory pad-sm']
正在返回一个节点 - 整个div
。然后,当您在此节点上调用InnerText
时,它将返回整个div中的文本,无标记。因此,您将看到您描述的行为:您的循环运行一次,将所有文本附加到一个块中,然后添加一个尾随换行符。
您需要使用XPath表达式,它将选择所有p
个节点,即//div[@class='hero-bio-backstory pad-sm']/p
。