从资源或站点获取XML

时间:2012-10-30 04:18:51

标签: c# .net wpf uri

我在最后两个代码行中遇到了一些问题:我尝试从应用程序资源和站点获取XML。在它之前,我用图像执行了相同的操作 - 一切正常。评论中的异常消息。

// Get image from site: 
// "pack://siteoforigin:,,,/http://www.designdownloader.com/item/pngs/user_f036/user_f036-20111114102144-00003.png"

// Get image from building resources (Build Action = Resources).
Uri uri_male_default = new Uri("pack://application:,,,/male.png");

// Get image from site: 
// "pack://siteoforigin:,,,/http://www.designdownloader.com/item/pngl/user_f046/user_f046-20111114102341-00003.png"

// Get image from building resources (Build Action = Resources).
Uri uri_female_default = new Uri("pack://application:,,,/myImages/famale.png"); 

// Create images (it's works fine):
img_male_default = new BitmapImage(uri_male_default);
img_female_default = new BitmapImage(uri_female_default);

//The next both cases ain't working:
// NotSupportedException: URI prefix isn't recognized.     
XElement xml_1 = XElement.Load("pack://application:,,,/SettingsX.xml"); // Get XML from building resources (Build Action = Resources).
XElement xml_2 = XElement.Load("pack://siteoforigin:,,,/https://skydrive.live.com/?cid=51b3145b64e05fef&id=51B3145B64E05FEF%21550");

XElement.Load获取URI作为参数。为什么我不能用XML做呢?

1 个答案:

答案 0 :(得分:4)

根据错误描述判断我非常怀疑是否可以将WPF包URI传递给XElement.Load,但您可以始终使用相对路径并且它将起作用,示例代码如下:

Uri uri = new Uri("/SettingsX.xml", UriKind.Relative);
            System.Windows.Resources.StreamResourceInfo info = Application.GetResourceStream(uri); 
            XElement settings = XElement.Load(info.Stream);

修改

从网络获取xml文件:

private void button1_Click(object sender, RoutedEventArgs e)
{
    string url = "Your URL...";
    var webClient = new System.Net.WebClient();
    webClient.DownloadStringCompleted += HttpsCompleted;
    webClient.DownloadStringAsync(new Uri(url));
}

private void HttpsCompleted(object sender, System.Net.DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
        XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
    }
}