windows商店应用程序中的HtmlAgilityPack

本文关键字:HtmlAgilityPack 应用程序 windows | 更新日期: 2023-09-27 17:59:05

所以我在控制台应用程序中有一些可用的测试代码,我将转到windows商店应用程序。问题是,我刚刚复制了控制台应用程序中的HtmlAgilityPack代码,现在它不起作用了。我确实有HtmlAgilityPack作为参考。。。

现在,HtmlAgilityPack的一些功能确实有效。不起作用的是
"正在使用(var client=new WebClient())"刚好通过错误"找不到类型或命名空间名称"WebClient"(是否缺少using指令或程序集引用?)"

下一个不起作用的部分是"foreach(doc.DocumentNode.SelectNodes("//a[@href]")中的HtmlNode链接)"位于SelectNodes部分,错误为"HtmlAgilityPack.HtmlNode'不包含'SelectNodes'的定义,也找不到接受'HtmlAgility Pack.HtmlNode'类型的第一个参数的扩展方法'SelectNode'(是否缺少using指令或程序集引用)"

现在N知道Html敏捷包依赖于.NET来实现XPATH。而且WinRT不支持XPATH。现在我的问题是,我该如何用在windows商店应用程序中运行的东西来完成下面的任务?

下面的代码执行以下操作。从下载html页面http://www.dubstep.net/track/5436,循环查找href,一旦找到#。它获取上面的href,并将其作为uri发送以启动。

我已经验证了下面的代码可以在控制台应用程序中工作。

 using (var client = new WebClient())
        {
            // Download the HTML
            string html = client.DownloadString("http://www.dubstep.net/track/5436");
            // Now feed it to HTML Agility Pack:
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(html);
            int i = 0;
            // Now you could query the DOM. For example you could extract
            // all href attributes from all anchors:
            List<string> list = new List<string>();
            foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
            {
                HtmlAttribute href = link.Attributes["href"];
                if (href != null)
                {
                    list.Add(href.Value);
                    i++;
                    if (href.Value == "#")
                    {
                        int t = i - 2;
                        Uri test = new Uri(list[t]);
                        start(test);
                    }
                }
            }
        }
 public static void start(Uri t)
    {
        Uri remoteUri = new Uri("http://soundcloud.com/dubstep/spag-heddy-the-master-vip/download");
        string fileName1 = "t", myStringWebResource = null;
        // Create a new WebClient instance.
        using (WebClient myWebClient = new WebClient())
        {
            myWebClient.DownloadFileCompleted += DownloadCompleted;
            myWebClient.DownloadProgressChanged += myWebClient_DownloadProgressChanged;
            myWebClient.DownloadFileAsync(t, "file.mp3");
        }
    }

windows商店应用程序中的HtmlAgilityPack

您可以尝试将WebClient替换为HtmlWeb,并使用HtmlAgilityPack的LINQ API而不是XPath,使其在Windows应用商店应用程序中工作:

//use HAP's HtmlWeb instead of WebClient
var htmlweb = new HtmlWeb();
// load HtmlDocument from web URL
HtmlDocument doc = htmlweb.Load("http://www.dubstep.net/track/5436");

int i = 0;
List<string> list = new List<string>();
//use LINQ API to select all `<a>` having `href` attribute
var links = doc.DocumentNode
               .DescendantsAndSelf("a")
               .Where(o => o.GetAttributeValue("href", null) != null);
foreach (HtmlNode link in links)
{
    HtmlAttribute href = link.Attributes["href"];
    if (href != null)
    {
        list.Add(href.Value);
        i++;
        if (href.Value == "#")
        {
            int t = i - 2;
            Uri test = new Uri(list[t]);
            start(test);
        }
    }
}

对于XPath,您可以使用以下链接来查找XPath For Windows Phone的实现(+源代码)。该代码很容易转移到WinRT。

注意:使用LINQ通常远优于使用XPath。有一种情况是不正确的——如果您的XPaths来自服务器。在这种情况下,您可以使用这样的解决方案。

http://socialebola.wordpress.com/2011/07/06/xpath-support-for-the-html-agility-pack-on-windows-phone/