【问题标题】:HtmlAgility:no contents appeared (C#,UWP)HtmlAgility:没有内容出现(C#,UWP)
【发布时间】:2016-10-20 04:37:51
【问题描述】:

我尝试使用 htmlagilitypack 解析表格,完成后我意识到我忘记证明 htmlagility 部分是否有效。 ... 很明显它不起作用 我也不知道我错过了什么,我在哪里做错了…… 因为我是初学者... 所以请不要对我太苛刻。

public partial class WebForm1 : System.Net.Http.HttpClient
{
    protected void Page_Load(object sender, EventArgs e)
    {

        System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();

        string header = "ie";
        if (!headers.UserAgent.TryParseAdd(header))
        {
            throw new Exception("Invalid header value: " + header);
        }

        header = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
        if (!headers.UserAgent.TryParseAdd(header))
        {
            throw new Exception("Invalid header value: " + header);
        }

        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();


        htmlDoc.LoadHtml(" http://www.eurogymnasium-waldenburg.de/egw_content/Stunden_Vertretungsplan/home.html");



        HtmlNode docNodes = htmlDoc.DocumentNode;

        HtmlNode navNode = htmlDoc.GetElementbyId("bereichaktionen");

        HtmlNode docNode = htmlDoc.DocumentNode.SelectSingleNode("/html/body[@class='ui-widget']/div[@id='main']/div[@id='vplan']/div[@id='bereichaktionen']");

        string nodeValue;

        nodeValue = (docNode.InnerText);

        Debug.WriteLine("nodeValue");

//我怀疑上面有什么问题,但我不确定是什么问题。

        if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
        {

        }
        else
        {

            if (htmlDoc.DocumentNode != null)
            {
                HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

                if (bodyNode != null)
                {

                }
            }
        }
    }

源地址在那里,你们可以试试

谢谢大家 X.L

【问题讨论】:

标签: c# html win-universal-app uwp html-agility-pack


【解决方案1】:

UWP 的 HtmlAgilityPack(还有 WinRT 和其他类似技术)不支持 XPath。来自 HtmlAgilityPack 背后的人的回答 https://stackoverflow.com/a/15941723/5562523

Html Agility Pack 依赖 .NET 来实现 XPATH。不幸的是,WinRT 不支持 XPATH,因此您在 WinRT 的 Html Agility Pack 中没有任何与 XPATH 相关的内容。

【讨论】:

    【解决方案2】:

    首先,通用应用程序不支持您当前使用的第三方包Html Agility Pack。请使用通用应用程序支持的HtmlAgilityPack for .NET Core 1.4.9.2

    其次,htmlDoc.LoadHtml(string html)方法的参数不是html站点的Uri,而是可以从webrequest的响应中得到的html内容。

    所以正确的代码应该如下:

    WebRequest request = HttpWebRequest.Create("http://www.eurogymnasium-waldenburg.de/egw_content/Stunden_Vertretungsplan/home.html");
    WebResponse response = await request.GetResponseAsync();
    Stream stream = response.GetResponseStream();
    var result = "";
    using (StreamReader sr = new StreamReader(stream))
    {
        result = sr.ReadToEnd();
    }
    HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(result);
    var node = htmlDoc.DocumentNode.SelectSingleNode("/html/body[@class='ui-widget']/div[@id='main']/div[@id='vplan']/div[@id='bereichaktionen']");
    

    我还将完整的项目CHtmlAgility上传到github,你可以下载测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2021-03-17
      • 2022-10-21
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      相关资源
      最近更新 更多