C# HtmlAgilityPack从页面中的所有div中提取文本,而不仅仅是从代码中指定的一个div中提取文本

C# HtmlAgilityPack从页面中的所有div中提取文本,而不仅仅是从代码中指定的一个div中提取文本,c#,html-agility-pack,C#,Html Agility Pack,我对带有HtmlAgilityPack的xpath表达式有一种奇怪的行为。 我试图使用HtmlAgilityPack来提取声明为 但是,当我使用下面的代码时,我只需获取其中的所有值 和。有人知道为什么会这样吗? 下面是复制它的完整代码: using System; using System.Xml.XPath; using HtmlAgilityPack; namespace ConsoleApplication1 { class Program { stati

我对带有HtmlAgilityPack的xpath表达式有一种奇怪的行为。 我试图使用HtmlAgilityPack来提取声明为
但是,当我使用下面的代码时,我只需获取其中的所有值
。有人知道为什么会这样吗? 下面是复制它的完整代码:

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;
        }
    }
}
使用系统;
使用System.Xml.XPath;
使用HtmlAgilityPack;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
常量字符串text1=@”
所容纳之物
内容1内容2
内容3
content4content5
内容6
    内容7 内容8

内容9

内容10内容12 内容13

"; foreach(SearchInPage(text1,//div[@class='cont'])中的XPathNavigator节点) { Console.WriteLine(“选项”+node.Value); } } 私有静态XPathNodeIterator SearchInPage(字符串文本,字符串xpath) { HtmlDocument HtmlDocument=新HtmlDocument(); htmlDocument.LoadHtml(文本); XPathNavigator XPathNavigator=htmlDocument.CreateNavigator(); XPathNodeIterator节点=xpathNavigator.Select(xpath); 返回节点; } } }
代码返回:
“content”、“content1-13”加上“content14”,它们存在于

中,因此如果我理解正确,您希望只查找节点
的子节点的值吗

试试这个:

HtmlDocument doc = new HtmlDocument;
doc.Load(Html);
HtmlNode node = doc.DocumentNode.SelectSingleNode(".//div[@class='cont']");

foreach(HtmlNode childNode in node)
{
    Console.WriteLine(childNode.Value);
}

在我面前,我没有办法调试这个,但是这个应该可以工作。
(“//div[@class='cont'])
应仅选择指定节点及其子节点,并忽略位于指定节点之外的任何内容。剩下的只是Linq和HtmlAgilityPack——记住,HtmlAgilityPack实现了XPath,所以在使用XPath之前一定要查看AgilityPack的可用方法。。。请记住,xml和html是不同的语言,适用于一种语言的内容不一定适用于另一种语言。

您必须使用一个损坏的html敏捷包。我的1.3.0.0版只返回一个节点,它是带有“cont”类的主“div”。@SimonMourier-我使用的是1.4.0版。我下载并重新安装了htmlagilitypack.dll,但仍然存在相同的问题。如果我从html代码中删除(紧跟在

之后的代码),那么代码就可以正常工作。i、 e.HAP仅返回@gffppaste中的值,我运行以下命令:

HtmlDocument doc=new HtmlDocument()
doc.Load(新的StringReader(text1))
HtmlNode node=doc.DocumentNode.SelectSingleNode(“.//div[@class='cont']”)
控制台.WriteLine(节点.InnerText)//使用了stringreader,因为我获取了“路径中的非法字符”错误。应用程序仍然从两个节点(和)返回文本。我在同一个网站的50页上测试了我的代码(我的问题附带的代码),并为其中48页工作text1'(参见问题)包含代码失败的2个页面中的1个页面的html。