2015-04-18 68 views
0

我正在使用XMLSOCCER API生成XML數據響應。高效的XML解析

他們有一個.NET庫來處理他們的數據。

var x = Client.GetAllLeagues(ApiKey); 
XmlNodeList list = x.ChildNodes; 

GetAllLeagues(string ApiKey)返回XMLNode其是響應的根:

<?xml version="1.0" encoding="UTF-8"?> 
<XMLSOCCER.COM> 
    <League> 
     <Id>1</Id> 
     <Name>English Premier League</Name> 
     <Country>England</Country> 
     <Historical_Data>Yes</Historical_Data> 
     <Fixtures>Yes</Fixtures> 
     <Livescore>Yes</Livescore> 
     <NumberOfMatches>5640</NumberOfMatches> 
     <LatestMatch>2015-04-13T21:00:00+00:00</LatestMatch> 
    </League> 
    <League> 
     <Id>2</Id> 
     <Name>English League Championship</Name> 
     <Country>England</Country> 
     <Historical_Data>Yes</Historical_Data> 
     <Fixtures>Yes</Fixtures> 
     <Livescore>Yes</Livescore> 
     <NumberOfMatches>8335</NumberOfMatches> 
     <LatestMatch>2015-04-17T20:45:00+00:00</LatestMatch> 
    </League> 
</XMLSOCCER.COM> 

我能到節點和它們的值與下列:

for (var i = 0; i < list.Count; i++) 
      { 
       var children = list.Item(i).ChildNodes; 

       for(var j=0; j < children.Count; j++){ 

        Console.WriteLine(String.Format("Key:{0} Value:{1}", children.Item(j).Name, children.Item(j).InnerText)); 

       } 
      } 

I」的問題面對的是這種感覺效率很低。 如果我可以使用XmlReader它可能使它更容易使用。但由於XmlReader.Create();期望一個Stream,我不能使用API​​返回的XmlNode。

我想我可以用從下面的例子: https://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx

你如何分析數據?

+3

停止使用其.NET庫並自己調用API。從API調用返回的XML字符串中創建一個'XDocument'。 – CoderDennis

+2

等待...如果它們的API重新調用一個'XmlNode',這意味着XML已經被解析了......爲什麼要將它重新填充到一個'XmlReader'中來第二次解析呢? –

+0

「我喜歡'XmlReader' over'XDocument' /'XmlDocument'」類型的問題感覺完全是個人喜好。我不確定你希望從SO中得到什麼樣的輸入以幫助你決定你更喜歡什麼(因爲根據你提供的信息,似乎沒有什麼特別的理由要選擇另一個)。 –

回答

1

正如CoderDennis建議的,我自己解析請求。

static void Main(string[] args) 
     { 
      const string API_KEY = "XXXXXXXXXXXXXXXXXXXXXXX"; 


      XmlDocument xdoc = MakeRequest("http://www.xmlsoccer.com/FootballDataDemo.asmx/GetAllLeagues", API_KEY); 

      StringBuilder output = new StringBuilder(); 


      // Create an XmlReader 
      using (XmlReader reader = new XmlNodeReader(xdoc)) 
      { 
       reader.ReadToFollowing("Id"); 
       Console.WriteLine(reader.Name +" " + reader.ReadElementContentAsString()); 
      } 
      Console.ReadKey(); 

     } 

     public static XmlDocument MakeRequest(string requestUrl, string API_KEY) 
     { 
      try 
      { 

       requestUrl = requestUrl + "?ApiKey=" + API_KEY; 

       HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 
       HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

       XmlDocument xmlDoc = new XmlDocument(); 
       xmlDoc.Load(response.GetResponseStream()); 
       return (xmlDoc); 

      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 

       Console.Read(); 
       return null; 
      } 
     } 

盧卡斯也是對的,我可以自己解析它。我有一個愚蠢的時刻。多謝你們。