2017-02-21 63 views
0

我在解析以下HTML問題:HtmlAgilityPack:無法解析底線(忽略端線)

<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

還有就是在你的HTML沒有斷行。即使在您的瀏覽器中,您也不會看到它,兩個標籤都會並排顯示。你的實際需求是什麼? 'Document.InnerText'只是並排返回所有文本控件的值。如果你不想,你必須選擇你想要的東西(f.e。所有span),然後使用'的string.join(Environment.NewLine,allInnerText)'。 –

+0

@TimSchmelter,我想用的innerText一個字符串,如果我從瀏覽器中複製它。 因此,如果有換行符,它們應該在的innerText太(\ n)的。 –

回答

1

。在你的HTML沒有斷行。即使在您的瀏覽器中,您也不會看到它,兩個標籤都會並排顯示。你的實際需求是什麼? Document.InnerText只是並排返回所有文本控件值。

如果你不想,你必須選擇你想要的東西(f.e。所有span),然後使用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)); 
+0

@ R.Matveev:嗯,我不按標籤名稱進行篩選要麼,所以你不需要爲過濾器'span'等所有 –

+0

'text'作品是否意味着,我們只是通過拆分文本...任何標籤之間的東西? –

+0

這將工作的所有嵌套節點? –