从外部网站获取XML数据

3

我有一个应用程序,每天从外部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");

should be:

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

我在考虑是否应该将内容存储到数组或其他数据结构中,并检查搜索字符串是否存在于其中?

我不确定该如何继续操作以及使用什么最好,也许我甚至不应该使用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
            }
        }

在我回答这个问题的时候:https://dev59.com/iGPVa4cB1Zd3GeqP413z#10412665 我提供了一个通用的方法来从URL返回XmlDocument。将其转换为返回XDocument只需要进行最少的工作。 - dash
如果这是标准的RSS格式(RSS或Atom),您还需要在LINQ语句中处理命名空间。 - Tim
请查看我根据您的评论所做的新编辑。 - NULL
@Menew - 你遇到了什么错误?你能发布一下从URL接收到的XML或它的一部分吗? - Tim
1个回答

5

你需要做更多的工作,而不仅仅是提供一个URL。

相反,你需要使用WebRequest类获取XML文件。如果请求成功,你可以将其用作XElement.Load的参数。

示例(仅为说明,务必添加一些错误处理):

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

感谢您的建议,根据您提供的答案进行了修改。 - NULL
@Menew,您的编辑并没有表明您想要问什么问题。最好还是提出另一个问题。 - villecoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接