以及我有以下問題。
我的html格式不正確,當遇到這種情況時,我選擇使用html敏捷包的節點時遇到問題。
代碼是下面:有沒有可能修復HtmlAgilityPack中的問題,當有一個不封閉的HTML標記?
string strHtml = @"
<html>
<div>
<p><strong>Elem_A</strong>String_A1_2 String_A1_2</p>
<p><strong>Elem_B</strong>String_B1_2 String_B1_2</p>
</div>
<div>
<p><strong>Elem_A</strong>String_A2_2 <String_A2_2> asdas</p>
<p><strong>Elem_B</strong>String_B2_2 String_B2_2</p>
</div>
</html>";
HtmlAgilityPack.HtmlDocument objHtmlDocument = new HtmlAgilityPack.HtmlDocument();
objHtmlDocument.LoadHtml(strHtml);
HtmlAgilityPack.HtmlNodeCollection colnodePs = objHtmlDocument.DocumentNode.SelectNodes("//p");
List<string> lststrText = new List<string>();
foreach (HtmlAgilityPack.HtmlNode nodeP in colnodePs)
{
lststrText.Add(nodeP.InnerHtml);
}
問題是,String_A2_2括在括號中。
所以htmlagility包在lststrText中返回5個字符串而不是4個。
所以有可能讓htmlagility pack返回元素3爲 "<strong>Elem_A</strong>String_A2_2 <String_A2_2> asdas"
?
或者我可以做一些預處理來關閉元素?
lststrText的當前內容
lststrText[0] = "<strong>Elem_A</strong>String_A1_2 String_A1_2"
lststrText[1] = "<strong>Elem_B</strong>String_B1_2 String_B1_2"
lststrText[2] = ""
lststrText[3] = ""
lststrText[4] = "<strong>Elem_B</strong>String_B2_2 String_B2_2"
您是否知道要包含的標籤的名稱,還是想要將所有打開的標籤保留爲文本? – 2009-12-23 15:34:58
我想將所有打開的標籤保留爲文字 – Karim 2009-12-23 18:37:55
Html Agility Pack無法做到這一點。它一次解析一個角色,並沒有真正的回溯概念。但是,它會關閉需要的標籤,但這是因爲您經歷了與您想要的不同輸出的結果。 最好的辦法是做一些預處理。 如果您知道要保留的標籤的名稱或模式,可以很容易地修改解析代碼以保持標籤類似於: String_A2_2>,稍後可以將其替換爲您的輸出。 也許修復您正在處理的格式錯誤的html更容易? –
2009-12-23 22:12:28