读取嵌套的 HtmlAgilityPack 问题 html

HtmlAgilityPack Issue in reading nested html

我在使用 HtmlAgilityPack 读取嵌套 HTML 节点时遇到问题。 我想读取 div 标签内的所有字体节点并处理所有 p 标签。

我的逻辑: 我 select 所有 p 标签,现在使用 foreach loop.Then 处理它 我正在 select 当前项目的第一个节点。

问题: 但它似乎是 select 从 html.

的根开始的第一个节点

我想要: 有什么方法可以从当前项目(节点)中获取 select 标签吗?

我有 HTML 这样的代码

 <font>State</font>
<div>
    <p>
        <font>text1</font>
        <a href="mailto:rabbi@chabadofalabama.com" target="mainFrame">EMAIL</a>
    </p>
    <p>
        <font>text2</font>
        <a href="mailto:rabbi@chabadofalabama.com" target="mainFrame">EMAIL</a>
    </p>
    <p>
        <font>text3</font>
        <a href="mailto:rabbi@chabadofalabama.com" target="mainFrame">EMAIL</a>
    </p>
    <p>
        <font>text4</font>
        <a href="mailto:rabbi@chabadofalabama.com" target="mainFrame">EMAIL</a>
    </p>
    <p>
        <font>text5</font>
        <a href="mailto:rabbi@chabadofalabama.com" target="mainFrame">EMAIL</a>
    </p>

</div>

我的C#阅读代码是:

Console.WriteLine("Enter A Url :");
        var ur = Console.ReadLine();
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(ur));
        request.Method = WebRequestMethods.Http.Get;
        request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        request.UserAgent = "Foo";
        request.Accept = "*/*";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string responseString = reader.ReadToEnd();
        response.Close();
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(responseString);
        var topLevelItems = doc.DocumentNode.Descendants().Where(n => n.Name.ToLower() == "p").ToList();

        foreach (var item in topLevelItems)
        {
            var v = item.SelectSingleNode("//font[1]");
            if(v!=null)
            {
                Console.WriteLine("Results : "+v.InnerText);
            }
        }

提前致谢

问题是,由于 //,您在每个循环中搜索整个文档数据,因此 foreach 似乎是 'not working'

替换为

var v = item.SelectSingleNode(".//font[1]");

现在它应该只检查 foreach 循环 item 变量内部的数据