Html Agility Pack 从 div 中获取特定内容

3
我正在尝试从“div”中提取文本并排除其他内容。您能帮我吗?!
<div class="article">
   <div class="date">01.01.2000</div>
   <div class="news-type"><a href="../link/page01">Breaking News</a></div>

   "Here is the location of the text i would like to pull"

</div>

当我提取“article”类时,我会得到所有内容,但我无法/不知道如何排除class =“date”,class =“news-type”以及其中的所有内容。
这是我使用的代码:
HtmlDocument doc = web.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[contains(@class,'article')]"))
{
    name_text.text += node.InnerHtml.Trim();
}

谢谢!

2个回答

0
你想要类型为HtmlTextNode的ChildNodes。未经测试的建议代码:
var textNodes = node.ChildNodes.OfType<HtmlTextNode>();
if (textNodes.Any())
{
    name_text.text += string.Join(string.Empty, textNodes.Select(tn => tn.InnerHtml));
}

非常感谢您的帮助。 - SteveGreen

0

另一种方法是使用XPath /text()[normalize-space()]div元素中获取非空的直接子文本节点:

var divs = doc.DocumentNode.SelectNodes("//div[contains(@class,'article')]");
foreach (HtmlNode div in divs)
{
    var node = div.SelectSingleNode("text()[normalize-space()]");
    Console.WriteLine(node.InnerText.Trim());
}

dotnetfiddle演示

输出:

"Here is the location of the text i would like to pull"

非常感谢您的帮助。如果我可以再问一个问题。如果我有多个<div class="article">?如何列出所有这些元素?循环会是什么样子的? 谢谢。 - SteveGreen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接