为什么在控制台和文本框上显示不同的内容

时间:2016-03-03 13:30:10

标签: c#

我试图使用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之间已经存在空间。但它不在文本框上。

3 个答案:

答案 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只输出您传递给它的字符串,而不添加任何行尾字符。