5

我正在尝试从 HTML 文档中获取文本的简单任务。所以我为此使用 HTMLdoc.DocumentNode.InnerText。问题在于,在某些网站上,当它们位于不同的标签中时,它们不会在单词之间放置空格。在这些情况下, DocumentNode.InnerText 将这些单词连接成一个,它变得无用了。

例如,我正在尝试阅读包含该行的站点

<span>İstanbul</span><ul><li><a href="i1.htm">Adana</a></li>

我得到了毫无意义的“İstanbulAdana”。

我在 HTMLAgilityPack 文档和 Google 中找不到任何解决方案

我错过了什么吗?

谢谢,

4

2 回答 2

10

这应该很容易做到。

const string html = @"<span>İstanbul</span><ul><li><a href=""i1.htm"">Adana</a></li>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
string result = string.Join(" ", doc.DocumentNode.Descendants()
  .Where(n => !n.HasChildNodes && !string.IsNullOrWhiteSpace(n.InnerText))
  .Select(n => n.InnerText));
Console.WriteLine(result); // prints "İstanbul Adana"
于 2012-08-08T20:16:04.367 回答
0

好吧,此示例的代码片段挂起:

const string html = @"<td><font size=""2"">abc </font><font size=""2"">(</font><font size=""2"">abc</font><font size=""2"">) </font><a href=""?query=abc"">abc</a>, abc<br><font size=""2"">abc </font>abc, <a href=""?query=abc"">abc</a>, abc, <a href=""?query=abc"">abc</a><br><font size=""2"">abc </font>abc abc, abc abc<br></td>";

没有连接子句它不会挂起(但它也没有正确放置空格)。

于 2012-08-17T16:01:34.070 回答