2013-05-02 62 views
1

我得到这种格式的xml从网络请求的响应,但我无法绑定它惠普数据滴在wpf。WPF绑定数据网格与xml在web响应中返回

这里是我的xml:

<population> 
<name>Tram, Joshua </name> 
    <id>83804</id> 
    <hcp>Dr. Krueger</hcp> 
    <symptoms>4</symptoms> 
    <range>1/17/13 - 4/13/13</range> 
    <last7>5</last7> 
    <connect>41380</connect> 
    <engage>5</engage> 
    <daysin>160</daysin> 
    <education>0.67</education> 
    <recco>Encourage Education</recco> 
    <name>Riess, Chuck </name> 
    <id>73403</id> 
    <hcp>Dr. Vockell</hcp> 
    <symptoms>4</symptoms> 
    <range>2/1/13 - 2/14/13</range> 
    <last7>5</last7> 
    <connect>41332</connect> 
    <engage>5</engage> 
    <daysin>179</daysin> 
    <education>0.74</education> 
    <recco>Encourage Tracking</recco> 
    <name>Park, Teruyuki </name> 
    <id>69235</id> 
    <hcp>Dr. Smithen</hcp> 
    <symptoms>3</symptoms> 
    <range>4/3/13 - 4/13/13</range> 
    <last7>5</last7> 
    <connect>41384</connect> 
    <engage>5</engage> 
    <daysin>35</daysin> 
    <education>0.15</education> 
    <recco> </recco> 
    </population> 

这里是我的代码,我将它存储在数据集中,并与DataGrid的约束力,但只显示在列不是全部。

WebRequest request = HttpWebRequest.Create(url); 
WebResponse response = request.GetResponse();   

DataSet set = new DataSet();    

set.ReadXml(response.GetResponseStream());    

return set; 
+0

的XML似乎奇怪的是,至少可以说..无论如何,你有什么尝试?您询问关于绑定到WPF数据网格,但您提供的代码不显示任何WPF相关行...... – RoelF 2013-05-02 14:42:30

+0

它看起来像是从XML中缺少标签。每个标签有多个实例(即,,等),就好像它们应该用另一个标签包装一样。 – Murkaeus 2013-05-02 17:13:22

+0

没有它的实际xml由webrequest – 2013-05-03 05:36:43

回答

1

我通过迭代上的XML元素和创建类的列表解决我的问题对象是这样的:

public List<Population> GetData() 
    { 
     DataSet ds =null; 

     List<Population> populationList = new List<Population>(); 

     string url = "http://www.lyfechannel.com/channels/WIN946/get_population.php"; 

     WebRequest request = HttpWebRequest.Create(url); 

     WebResponse response = request.GetResponse(); 

     StreamReader reader = new StreamReader(response.GetResponseStream()); 

     XmlDocument doc = new XmlDocument(); 

     doc.LoadXml(reader.ReadToEnd()); 


     XmlNode rootNode = doc.SelectSingleNode("//population"); 

     XmlNodeList currentNodes = doc.SelectNodes("//name"); 

     var objPopulation = new Population[currentNodes.Count]; 

     if (currentNodes.Count != 0) 
     { 

      for (int i = 0; i < currentNodes.Count; i++) 
      { 
       objPopulation[i] = new Population(); 
       //objPopulation[i].Name = currentNodes[i].InnerText; 

      } 

     } 


     XmlNodeList idNodeList = doc.SelectNodes("//id"); 

     if (idNodeList.Count != 0) 
     { 

      for (int i = 0; i < idNodeList.Count; i++) 
      { 
       objPopulation[i] = new Population(); 
       objPopulation[i].ID = idNodeList[i].InnerText; 


       currentNodes = doc.SelectNodes("//name"); 


       if (currentNodes.Count != 0) 
       { 

        for (int ij = 0; ij < currentNodes.Count; ij++) 
        { 

         objPopulation[ij].Name = currentNodes[ij].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//hcp"); 


       if (currentNodes.Count != 0) 
       { 

        for (int j = 0; j < currentNodes.Count; j++) 
        { 

         objPopulation[j].HCP = currentNodes[j].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//symptoms"); 


       if (currentNodes.Count != 0) 
       { 

        for (int k = 0; k < currentNodes.Count; k++) 
        { 

         objPopulation[k].Symptoms = currentNodes[k].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//range"); 


       if (currentNodes.Count != 0) 
       { 

        for (int l = 0; l < currentNodes.Count; l++) 
        { 

         objPopulation[l].Range = currentNodes[l].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//last7"); 


       if (currentNodes.Count != 0) 
       { 

        for (int m = 0; m < currentNodes.Count; m++) 
        { 

         objPopulation[m].Last7 = currentNodes[m].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//connect"); 


       if (currentNodes.Count != 0) 
       { 

        for (int n = 0; n < currentNodes.Count; n++) 
        { 

         objPopulation[n].Connect = currentNodes[n].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//engage"); 


       if (currentNodes.Count != 0) 
       { 

        for (int o = 0; o < currentNodes.Count; o++) 
        { 

         objPopulation[o].Engage = currentNodes[o].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//daysin"); 


       if (currentNodes.Count != 0) 
       { 

        for (int p = 0; p < currentNodes.Count; p++) 
        { 

         objPopulation[p].DaysIn = currentNodes[p].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//education"); 


       if (currentNodes.Count != 0) 
       { 

        for (int q = 0; q < currentNodes.Count; q++) 
        { 

         objPopulation[q].Education = currentNodes[q].InnerText; 

        } 

       } 


       currentNodes = doc.SelectNodes("//recco"); 


       if (currentNodes.Count != 0) 
       { 

        for (int r = 0; r < currentNodes.Count; r++) 
        { 

         objPopulation[r].Recco = currentNodes[r].InnerText; 

        } 

       } 

       populationList.Add(objPopulation[i]); 

      } 

     } 

     MyGrid.ItemsSource = populationList; 


    } 

,这里是我的类代码:

class Population 
{ 

    public string Name { get; set; } 
    public string ID { get; set; } 
    public string HCP { get; set; } 
    public string Symptoms { get; set; } 
    public string Range { get; set; } 
    public string Last7 { get; set; } 
    public string Connect { get; set; } 
    public string Engage { get; set; } 
    public string DaysIn { get; set; } 
    public string Education { get; set; } 
    public string Recco { get; set; } 

}