【问题标题】:Get xml data from external website从外部网站获取xml数据
【发布时间】:2013-09-26 14:38:18
【问题描述】:

我有一个从外部 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
            }
        }

【问题讨论】:

  • 在我对这个问题的回答中:stackoverflow.com/questions/10412494/… 我给出了一个从 URL 返回 XmlDocument 的通用方法。转换为返回 XDocument 需要最少的工作。
  • 如果这是标准 RSS 格式(RSS 或 Atom),您还需要在 LINQ 语句中处理命名空间。
  • 请查看我根据您的 cmets 进行的新编辑
  • @Menew - 你得到什么错误?您可以发布从 URL 收到的 XML 或其中的一部分吗?

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


【解决方案1】:

除了提供 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);

【讨论】:

  • 感谢您的建议,根据您建议的答案查看我的编辑。
  • @Menew 您的编辑并未暗示您要问什么问题。最好再问一个问题。
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多