我有这个代码加载xml(到List),它工作正常:
public MainPage()
{
this.InitializeComponent();
string XMLFilePath = Path.Combine(Package.Current.InstalledLocation.Path, "something.xml");
XDocument loadedData = XDocument.Load(XMLFilePath);
}
如果我想从我的服务器调用xml怎么办?
这是最后一次尝试:
using System.Net.Http;
using System.Runtime.Serialization.Json;
...
private string jsonString;
public MainPage()
{
this.InitializeComponent();
loadData();
//string XMLFilePath = Path.Combine(Package.Current.InstalledLocation.Path, "something.xml");
XDocument loadedData = XDocument.Load(jsonString);
...
private async void loadData()
{
var httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://domain.com/something.xml"));
jsonString = await response.Content.ReadAsStringAsync();
}
这是错误:
An exception of type 'System.ArgumentNullException' occurred in System.Xml.ReaderWriter.dll but was not handled in user code
任何帮助都会很棒。
感谢。
答案 0 :(得分:4)
您只需使用XmlDocument.LoadFromUriAsync | loadFromUriAsync methods从指定位置异步加载XML文档即可。此位置也可以是Http链接。
这里只是为了一个非常简单的测试:
<TextBlock x:Name="txt" />
代码背后的代码:
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
XmlDocument xmlDoc = await XmlDocument.LoadFromUriAsync(new Uri("http://domain.com/something.xml"));
txt.Text = xmlDoc.GetXml().ToString();
}
请注意,此处xml文档的命名空间为Windows.Data.Xml.Dom
,而不是System.Xml
。我注意到你的Uri地址就像http://domain.com/something.xml
,也许你正在使用本机服务器,在这样做时,你可能需要在项目的清单文件中启用Private Networks(Client & Server)
功能。
<强>更新强>:
抱歉,我不知道您要使用LinQ
,使用XDocument
加载xml,基本上有两种方法:来自字符串Uri或来自流,但对于第一种方法, Uri参数必须是文件系统相对或绝对路径。
因此,这里有一种方法是您可以将xml保存到本地文件并使用XDocument
再次加载它,或者您可以使用stream来实现此目的,例如:
HttpClient client = new HttpClient();
var response = await client.GetStreamAsync("http://domain.com/something.xml");
XDocument xmlDoc = XDocument.Load(response);
txt.Text = xmlDoc.Document.ToString();
答案 1 :(得分:1)
你需要指定地址,尝试这样的事情:
public MainPage()
{
this.InitializeComponent();
string XMLFilePath = @"http://www.msn.com";
XmlDocument LoadedData = new XmlDocument();
LoadedData.Load(XMLFilePath);
}
如果要使用XDocument对象,请尝试使用方法“Parse”而不是“Load”。
答案 2 :(得分:0)
您的私有异步void loadData()不是await,jsonString为null。 你可以
private async void loadData()
{
var httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://domain.com/something.xml"));
jsonString = await response.Content.ReadAsStringAsync();
XDocument loadedData = XDocument.Load(jsonString);
}
public MainPage()
{
this.InitializeComponent();
loadData();
}