2013-03-05 58 views
0

我正在建立一些數據庫中的數據表。它來自很多國際來源,所以我遇到了編碼問題,我想我已經清除了它們。但是現在我看到一些奇怪的輸出並且無法弄清楚原因。HtmlAgilityPack td.innertext錯誤?

這是VS2010中的C#應用​​程序。在調試運行時,我看到在我的課的字符串開頭:

Animal and vegetable oils 1 < 5 MW <br>5-50 MW 30 <br> 

但是,當我與分配:

td = htmlDoc.CreateElement("td"); 
td.Attributes.Add("rowspan", "5"); 
td.Attributes.Add("valign", "top"); 
td.InnerHtml = this.DRGuideNote.ToString(); 

的td.InnerHtml顯示

Animal and vegetable oils 1 < 5=\"\" mw=\"\"><br>5-50 MW 30 <br> 

爲什麼把等於並逃脫到該文本中的引號?它不會跨越所有數據,只是幾個文件。有任何想法嗎? (PS。在字符串中沒有顯示html中斷,我如何發佈,所以它忽略html?試圖「與4個空格縮進,但似乎沒有工作?)

+0

'1 <5'中的'<'是不正確的HTML。將其更改爲'1 < 5',它應該可以工作。 – 2013-03-05 17:35:15

+0

沒有想到這一點,你說得對,我應該編碼的HTML。但是輸出在其他地方正確顯示。問題在於我得到的是添加的「=」「',它出現在我的文本中的單詞之後。你看到任何相關的原因嗎? – Steve 2013-03-05 18:18:26

+1

我寫完後,我想我意識到發生了什麼。因爲<沒有被編碼,所以它可能假定它是一個標籤的開始,然後解析每個單詞,期望它們成爲一個沒有值的參數,這就是爲什麼我得到=「」,因爲就它而言有關這個詞是一個空白標籤參數。 – Steve 2013-03-05 18:30:08

回答

1

HTML Agility Pack的HTML分析器正在治療<作爲HTML標籤的開頭字符,所以當它解析5和MW時,它認爲它在標籤內,因此它將它們當作標籤屬性來對待,一旦它進入<br>就會停止,這會強制它關閉標籤

它在瀏覽器中工作的原因是因爲瀏覽器通常遵循HTML5規範來處理無效的HTML規範有很多關於如何處理無效HTML的規則,目的是理解什麼是意圖是,在這種情況下,規範說,一克拉後跟一個空間應該被視爲文本。 HAP的解析器不處理這個特定的邊界情況。所以我不會說這是一個錯誤,而是HAP的本地HTML解析器的限制。

HAP的替代方案是CsQuerynuget),它使用完整的HTML5解析器(實際上與Firefox相同的HTML解析器),並且可以處理這種標記。

+0

是的,這正是發生的事情。我一直在努力爭取最終的高質量輸出數據,這些數據來自電子表格中給我們存儲的經常有缺陷的數據,有時經過編碼,有時候不會,充滿奇怪的字符,因爲它是國際性的。現在我只是想念那些顯而易見的東西哈哈。謝謝。 – Steve 2013-03-05 20:40:45