我试图使用HtmlAgilityPack从html页面获取文本。这是我的代码
var headers = doc.DocumentNode.SelectNodes("//h2");
if (headers != null)
{
foreach (HtmlNode item in headers)
{
textBox1.AppendText(item.InnerText);
Console.WriteLine(item.InnerText);
}
}
它在控制台和文本框中显示不同的结果。
结果在控制台上:
Avril
Lavigne
结果在textBox上:
AvrilLavigne
我想要它:
Avril Lavigne
我无法弄清楚两个单词之间的字符。
html上的原始文字是: Avril Lavigne Avril和Lavigne之间已经存在空间。但它不在文本框上。
答案 0 :(得分:0)
Console.WriteLine
撰写您的输入,然后在其后添加Environement.NewLine
。
您可以使用
var headers = doc.DocumentNode.SelectNodes("//h2");
if (headers != null)
{
textBox1.AppendText(string.Join(' ', headers.Select(item => item.innerHTML)));
}
这将加入你们每个item.innerHTML并在其间添加一个空格。
答案 1 :(得分:0)
尝试将所有文本元素添加到数组中,然后将该数组传递给
var arr = new List<string>();
foreach(var item in items){
arr.Add(item.InnerText);
}
textBox1.AppendText(string.Join(" ", arr));
答案 2 :(得分:0)
TextBox
控件的AppendText
方法只是将传递给它的任何字符串附加到控件的Text
属性的末尾。 Console
类的WriteLine
方法将传递给它的字符串追加到控制台,然后附加行尾字符,即回车符&amp;换行。
如果您希望TextBox
和控制台中的文本用空格分隔,则必须自己构建:
bool isFirst = true;
foreach (HtmlNode item in headers)
{
string textToAppend = (isFirst ? string.Empty : " " ) + item.InnerText;
isFirst = false;
textBox1.AppendText(textToAppend);
Console.Write(textToAppend);
}
在这种情况下,Console.Write
只输出您传递给它的字符串,而不添加任何行尾字符。