HtmlAgilityPack与XPATH结合使用

时间:2014-03-22 12:03:47

标签: c# xpath html-agility-pack

我有一段html,我正在尝试使用HtmlAgilityPack进行解析。这是我感兴趣的代码片段(抱歉使用图片,但它更清晰,并且更清楚地显示了我想要的点):

enter image description here

我想做的事情非常简单,但我无法理解。我想要的是选择图片中突出显示的div id = content。要使用c#中的HtmlAgilitypack执行此操作,我正在使用:

HtmlDocument doc = new HtmlDocument(); //creating HtmlAgilityPack document
doc.LoadHtml(htmlstring); //loading html

var content = doc.DocumentNode.SelectSingleNode("//div[@id='content']"); //running XPATH

问题是最后一条指令选择了我上面提到的div,但它不完整。它不包含图片中显示的所有子项,而只包含一个子项,第一个div包含id = item 使用XPTAH Helper通过Chrome运行时,同一块XPATH会选择与其所有子项一起使用的正确div。 我不明白我是否错误地使用HtmlAgilityPack,或者如果我的XPATH表达式不正确,是否有人可以提示?

1 个答案:

答案 0 :(得分:1)

嗯,你有一些混乱的HTML来处理那里。这些item中的每一个都包含两个格式错误的<a>标记。

其中一个在其开始代码的末尾缺少>

<div id="covershot"><a href="http://www.cineblog01.tv/the-thirteenth-tale-subita-2013/" target="_self" <p><img src="http://www.locandinebest.net/imgk/The_Thirteenth_Tale_2013.jpg"></p>

而另一个在<a class="之后停止并且没有结束标记。

<td><div><a class="<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.cineblog01.tv%2Fthe-thirteenth-tale-subita-2013%2F&amp;layout=button_count&amp;show_faces=false&amp;width=150&amp;action=like&amp;colorscheme=dark" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:150px; height:20px"></iframe></div> </div> </td>

我猜这会给解析器带来一些问题。您是否尝试过选择wrappercontentwrapper div来查看是否将丢失的div放入其中?

您可能会尝试使用某些字符串替换来解决这些问题,以确定是否可以正确解析它:

htmlstring = htmlstring.Replace("target=\"_self\" <", "target=\"_self\" ><")
                       .Replace("<a class=\"<", "<");