C# 使用InnerText时防止HTMLAgilityPack连接单词
我试图做一个简单的任务,从HTML文档中获取文本。 因此,我使用HTMLdoc.DocumentNode.InnerText来实现这一点。 问题是,在一些网站上,当单词位于不同的标签中时,它们之间没有空格。在这些情况下,DocumentNode.InnerText将这些单词连接成一个单词,它就变得无用了 例如,我试图阅读一个包含该行的站点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
<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还将为我提供其子体的文本。我看不出我怎么能在你建议的循环中使用它