2015-04-18 66 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; 
      } 
     } 

卢卡斯也是对的,我可以自己解析它。我有一个愚蠢的时刻。多谢你们。