我有一段html,我正在尝试使用HtmlAgilityPack进行解析。这是我感兴趣的代码片段(抱歉使用图片,但它更清晰,并且更清楚地显示了我想要的点):
我想做的事情非常简单,但我无法理解。我想要的是选择图片中突出显示的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表达式不正确,是否有人可以提示?
答案 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&layout=button_count&show_faces=false&width=150&action=like&colorscheme=dark" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:150px; height:20px"></iframe></div> </div> </td>
我猜这会给解析器带来一些问题。您是否尝试过选择wrapper
或contentwrapper
div
来查看是否将丢失的div
放入其中?
您可能会尝试使用某些字符串替换来解决这些问题,以确定是否可以正确解析它:
htmlstring = htmlstring.Replace("target=\"_self\" <", "target=\"_self\" ><")
.Replace("<a class=\"<", "<");