2013-05-20 46 views
0

我一直在尋找類似的問題,但每這些都是簡單的解決(雙reader.Read()方法),但我很奇怪......XMLReader可以跳過所有其他節點

這裏是我的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/

和IM選擇elemName = 「p」 - theese是價值觀我jqplot圖,順便說一句。

問題是,這個解析方法保存列表每隔一個「p」節點;在這個XML文件中有20個「p」節點,但是我的解析器只保存了10個元素(每隔一個,從第一個開始);

我在做什麼錯?

回答

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,以使其更加通用。