【发布时间】:2012-06-18 21:25:50
【问题描述】:
我在使用 HtmlAgilityPack 的 xpath 表达式时遇到了奇怪的行为。
我正在尝试使用 HtmlAgilityPack 来提取声明为的 div 中的所有值
<div class='cont'> 但是,当我使用下面的代码时,我只需获取其中的所有值
<div class='cont'> 和 <div class='button'>。有谁知道为什么会这样?
这是重现它的完整代码:
using System;
using System.Xml.XPath;
using HtmlAgilityPack;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const string text1 = @"<div class=""cont"">
<h3>content</h3>
<div style=""margin: 0cm 0cm 0pt"" class=""Normal"">content1</div><div style=""margin: 0cm 0cm 0pt"" class=""Normal""> content2</div>
<div style=""margin: 0cm 0cm 0pt"" class=""Normal"">content3 </div>
<div>content4 </div><strong>content5
<div>content6 </div><ul type=""disc"">
<div>content7 </div>
<div>content8 </div> </ul>
<p class='margin10'><font size=""2"">
<div>
<p><span style=""font-family: Arial"">content9</span></p>
</div>
<div>content10</font><a href=""mailto:james@polis.com""><u><font color=""#0000ff"" size=""2""><font color=""#0000ff"" size=""2""> content11 </u></font></font></a><font size=""2""> content12
<div>content13</div>
</div>
</font>
</p>
</div>
<div class=""button"">
<span class=""applybtn""><a class=""buttonGlobal buttonAlpha"" href=""/uk/job/apply/(id)/608735"">content14</a></span>
</div>";
foreach (XPathNavigator node in SearchInPage(text1, "//div[@class='cont']"))
{
Console.WriteLine("option " + node.Value);
}
}
private static XPathNodeIterator SearchInPage(string text, string xpath)
{
HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(text);
XPathNavigator xpathNavigator = htmlDocument.CreateNavigator();
XPathNodeIterator nodes = xpathNavigator.Select(xpath);
return nodes;
}
}
}
代码返回:
'content', 'content1-13' PLUS 'content14' 存在于<div class='button'>
【问题讨论】:
-
您必须使用损坏的 Html 敏捷包。我的版本 1.3.0.0 只返回一个节点,它是带有 'cont' 类的主 'div'。
-
@SimonMourier - 我使用的是 1.4.0 版稳定版。我下载并重新安装了 htmlagilitypack.dll 但仍然有同样的问题。如果我从 html 代码中删除 (紧跟在
之后的那个),那么代码可以正常工作。即 HAP 仅返回
内的值
标签: c# html-agility-pack