我在解析以下html时遇到了问题:
<tr>
<td><p><b>
<span>Company:</span></b>
<span>Test</span>
</p></td>
</tr>
<tr>
<td><p><b>
<span>Company:</span></b>
<span>Test 2</span>
</p></td>
</tr>
我的代码是:
HtmlDocument doc = new HtmlDocument();
doc.Load(@"email.txt");
Console.WriteLine(doc1.DocumentNode.InnerText);
我有以下输出:Company:TestCompany:Test 2
,但我想要
Company: Test
Company: Test 2
所以,问题是没有解析换行符。
P.S。:doc.OptionWriteEmptyNodes = true;
没有任何区别。
更新:我的意思是,无论html是什么,都没有解析结束行。即使有<br />
标签等等。
答案 0 :(得分:1)
你的html中没有换行符。即使在您的浏览器中,您也看不到它,两个标签都会并排显示。你的实际要求是什么? Document.InnerText
只是并排返回所有文本控件值。
如果你不想要你必须选择你想要的东西(例如所有跨度),然后使用String.Join(Environment.NewLine, allInnerText)
var allInnerTexts = doc.DocumentNode.SelectNodes("//text()")
.Select(n => n.InnerText.Trim())
.Where(text => !String.IsNullOrEmpty(text));
Console.WriteLine(String.Join(Environment.NewLine, allInnerTexts));