C# 使用InnerText时防止HTMLAgilityPack连接单词

C# 使用InnerText时防止HTMLAgilityPack连接单词,c#,html-agility-pack,C#,Html Agility Pack,我试图做一个简单的任务,从HTML文档中获取文本。 因此,我使用HTMLdoc.DocumentNode.InnerText来实现这一点。 问题是,在一些网站上,当单词位于不同的标签中时,它们之间没有空格。在这些情况下,DocumentNode.InnerText将这些单词连接成一个单词,它就变得无用了 例如,我试图阅读一个包含该行的站点 <span>İstanbul</span><ul><li><a href="i1.htm">Ada

我试图做一个简单的任务,从HTML文档中获取文本。 因此,我使用HTMLdoc.DocumentNode.InnerText来实现这一点。 问题是,在一些网站上,当单词位于不同的标签中时,它们之间没有空格。在这些情况下,DocumentNode.InnerText将这些单词连接成一个单词,它就变得无用了

例如,我试图阅读一个包含该行的站点

<span>İstanbul</span><ul><li><a href="i1.htm">Adana</a></li>
İstanbul
我得到的是毫无意义的“İstanbulAdana”

我在HTMLAgilityPack文档和谷歌都找不到任何解决方案

我错过什么了吗


谢谢,

这应该很容易做到

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"
const string html=@“İstanbul
  • ”; var doc=新的HtmlDocument(); doc.LoadHtml(html); string result=string.Join(“,doc.DocumentNode.subjections() .Where(n=>!n.HasChildNodes&&!string.IsNullOrWhiteSpace(n.InnerText)) .选择(n=>n.InnerText)); Console.WriteLine(结果);//印刷品“斯坦布尔阿达纳”
对于这个例子,代码片段挂起:

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>";
const string html=@“abc(abc),abc
abc,abc,
abc,abc
”;

如果没有join子句,它不会挂起(但也不能正确放置空格)。

这是预期的行为。尝试在节点树中循环手动生成文本?这正是应该发生的。在构建字符串的同时,您可以在循环中的每个节点之间手动插入一个空格。我相信这可能有效,但这真的是唯一的解决方案吗?此外,由于一些标记包含文本和另一个标记,所以编写起来并不简单。但是InnerText是递归的,所以我不能只获取特定标记中的文本,而不是它的子对象中的文本。如果您使用InnerText并正确选择节点,那么它不应该返回任何HTML(标记)?然后使用上面描述的方法就可以了。或者,您可以在循环中检查节点“InnerText”是否包含标记,如果包含,则获取该标记的内部文本,然后添加到字符串列表中……InnerText还将为我提供其子体的文本。我看不出我怎么能在你建议的循环中使用它