1

首先我想说我是 C# 和 Windows 8 应用程序的新手。所以,请不要对我太苛刻。

我有以下代码来提取一些图像 url 并将它们保存在 XML 文件中。我正在使用 Html Agility Pack,但是当我尝试将代码与 Windows 8 应用程序一起使用时,它不起作用。我知道我必须从这里使用 Fizzler Html Agility Pack:http://fizzlerex.codeplex.com/releases/view/89833我不知道出了什么问题。我正在使用 Visual Studio 2012,它无法识别以下元素:

***WebClient*** x = new ***WebClient***();  
***XmlDocument*** output = new ***XmlDocument***();  
***XmlElement*** imgElements = output.CreateElement("ImgElements");  
foreach(HtmlNode link in document.***DocumentElement***.SelectNodes("//img[contains(@src, '_412s.jpg')]"));                                             
***out***.Save(@"C:\test.xml");

代码:

using HtmlAgilityPack;
using Fizzler;
using Fizzler.Systems.HtmlAgilityPack;
using System.Xml;

public void Images()
{
    WebClient x = new WebClient();
    string source = x.DownloadString(@"http://www.google.com");
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
    document.Load(source);
    XmlDocument output = new XmlDocument();
    XmlElement imgElements = output.CreateElement("ImgElements");
    output.AppendChild(imgElements);
    foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img[contains(@src, '_412s.jpg')]"))
    {
        XmlElement img = output.CreateElement(link.Name);
        foreach(HtmlAttribute a in link.Attributes)
        {
            img.SetAttribute(a.Name, a.Value);
        }
        imgElements.AppendChild(img);
    }
    out.Save(@"C:\test.xml");
}

你能帮我么?

谢谢 !

4

2 回答 2

2
out.Save(@"C:\test.xml");

应该:

output.Save(@"C:\test.xml");

然后您需要将以下两个命名空间添加到代码文件的顶部:

using System.Xml;
using System.Net;

这些错误与 Windows 8 无关。它们将是任何版本的错误。我不确定你为什么需要从一个WebClient类切换到另一个HttpClient类,因为它们都在 Windows 8 中受支持,但是,如果你想使用这个HttpClient类,这样的东西应该可以工作:

HttpClient x = new HttpClient();
Task<string> t = x.GetStringAsync(@"http://www.google.com");
t.Wait();
string source = t.Result;
于 2012-11-18T20:48:27.277 回答
0

尝试这样的事情:

HttpClientHandler handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler as HttpMessageHandler) { BaseAddress = new Uri(@"http://www.google.com") };
var r = await client.GetAsync(client.BaseAddress);
string html;
if (r.IsSuccessStatusCode) html = await r.Content.ReadAsStringAsync();
于 2012-11-19T05:42:20.490 回答