C# 带有XPATH的HtmlAgilityPack troupbles

C# 带有XPATH的HtmlAgilityPack troupbles,c#,xpath,html-agility-pack,C#,Xpath,Html Agility Pack,我有一段html,我正试图用HtmlAgilityPack解析它。下面是我感兴趣的一段代码(很抱歉使用了图片,但它更清晰,更清楚地显示了我想要的要点): 我想做的很简单,但我想不出来。我想要的是选择图像中突出显示的带有id=content的div。要使用c语言中的HtmlAgilitypack实现这一点,我正在使用: HtmlDocument doc = new HtmlDocument(); //creating HtmlAgilityPack document doc.LoadHtml(h

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

我想做的很简单,但我想不出来。我想要的是选择图像中突出显示的带有
id=content
div
。要使用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表达式是否不正确,有人能给我一个提示吗?

好吧,你需要处理一些混乱的HTML。这些
项中的每一项都包含两个格式错误的
标记

一个在其开始标记的末尾缺少其

<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>

您能告诉我们您在哪里使用
content
变量的代码吗?到目前为止,您向我们展示的内容看起来不错。@JLRishe:很简单,当我检查content.InnerHtml时,它只包含第一个子项(id=item的第一个div),而不是所有子项。对内容节点的进一步查询证实了这一点,显示只有一个项目。也许我的问题措词不当,xpath确实选择了想要的div,但其中只有第一个子项,而不是所有子项。我现在就编辑这个问题。互联网上有没有什么地方可以让我们查看这个页面,看看有没有什么奇怪的地方?突出的一点是,您有许多元素具有相同的
id
,这在HTML中是无效的。我怀疑这是问题的原因,但你永远不知道…@JLRishe:我已经在这里粘贴了完整的源代码:我也注意到了多个ID,不幸的是,我不是创建页面的人,对此无能为力。该死,我没有注意到,我想知道浏览器到底是如何呈现这些的。谢谢你的建议,我会尝试用字符串替换,会回来报告的。不幸的是,我无法更改问题中的html,因此我必须尝试用代码修复它。对不起,忘记了这个问题,这正是问题所在,答案已被接受。
<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>
htmlstring = htmlstring.Replace("target=\"_self\" <", "target=\"_self\" ><")
                       .Replace("<a class=\"<", "<");