以及我有以下问题。
我的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