XMLReader会跳过其他每个节点

时间:2013-05-20 13:24:22

标签: asp.net-mvc-4 xml-parsing

我一直在寻找类似的问题,但每一个都很容易解决(double reader.Read()方法),但我的很奇怪......

这是我的ASP.NET C#方法:

private IEnumerable<XElement> getXMLData(String inputURI, String elementName)
    {
        List<XElement> result = new List<XElement>();
        XmlReader reader = XmlReader.Create(inputURI);
        XElement elem;

        reader.MoveToContent();
        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element)
            {
                if (reader.Name.Equals(elementName))
                {
                    elem = XNode.ReadFrom(reader) as XElement;
                    if (elem != null)
                    {
                        result.Add(elem);
                    }
                }
            }
        }
        return result;
    }

我正在尝试解析以下URI: http://chartapi.finance.yahoo.com/instrument/1.0/aapl/chartdata;type=quote;range=1m/

我选择elemName =“p” - 顺便说一句,theese是我的jqplot图表的值。

问题是,这个解析方法保存到列出每个其他“p”节点;这个XML文件中有20个“p”节点,但我的解析器只保存了10个元素(每个节点从第一个开始);

我做错了什么?

1 个答案:

答案 0 :(得分:1)

更简洁的解决方案可能如下所示 -

using (var client = new WebClient())
{
    string s = client.DownloadString("http://chartapi.finance.yahoo.com/instrument/1.0/aapl/chartdata;type=quote;range=1m/");
    var xDoc = XDocument.Parse(s);
    var result = xDoc.Descendants("p").ToList();

    return result;

}

将URL替换为传递给方法的URL字符串,使其更通用。