从外部网站获取xml数据

时间:2013-09-26 14:38:19

标签: c# xml asp.net-mvc linq

我有一个应用程序,它从外部RSS提要获取每日提要(此数据以xml格式显示)。 我有一个搜索表单,允许用户搜索我的数据库,但是,我想使用用户在我的网站上输入的相同搜索字符串来搜索此RSS提要,然后只提取相关的,并在我的网站上显示。

我一直在使用以下代码使用linq读取xml文件:

XElement xelement = XElement.Load("..\\..\\Employees.xml");
IEnumerable<XElement> employees = xelement.Elements();
Console.WriteLine("List of all Employee Names along with their ID:");
foreach (var employee in employees)
{
    Console.WriteLine("{0} has Employee ID {1}",
        employee.Element("Name").Value,
        employee.Element("EmpId").Value);
}

我遇到的问题是,在代码中我使用的是url而不是文件名:

XElement xelement = XElement.Load("..\\..\\Employees.xml");

应该是:

XElement xelement = XElement.Load("http://www.test.com/file.xml"); 

我想也许我应该将内容存储到数组或其他内容中,并检查以确定searchString是否在其中?

我不知道如何继续使用,最好使用,也许我甚至不应该使用linq?

所以使用下面的回答就是我所做的:

public void myXMLTest()
        {
            WebRequest request = WebRequest.Create("http://www.test.com/file.xml");
            WebResponse response = request.GetResponse();
            Stream dataStream = response.GetResponseStream();

            XElement xelement = XElement.Load(dataStream); 
            IEnumerable<XElement> employees = xelement.Elements();


            MessageBox.Show("List of all Employee Names along with their ID:");

            foreach (var employee in employees)
            {
                MessageBox.Show(employee.Name.ToString()); 
                /* the above message box gives me this:
                {http://www.w3.org/2005/Atom}id
                {http://www.w3.org/2005/Atom}name
                {http://www.w3.org/2005/Atom}title
                etc
                */
                MessageBox.Show(employee.Element("name").Value);//this gives me error
            }
        }

1 个答案:

答案 0 :(得分:3)

除了提供URL之外,你还需要做更多的工作。

相反,您需要使用WebRequest类来获取XML文件。如果请求成功,您可以将使用它作为参数转换为XElement.Load。

示例(仅供说明,因为对Pete的喜爱添加了一些错误处理):

WebRequest request = WebRequest.Create("http://www.test.com/file.xml");
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
XElement doc = Xelement.Load(dataStream);