2014-02-13 22 views
0
数据

从Web服务器接收到一个数据我的程序:如何提取XML

<response> 
    <movie> 
     <id>111112</id> 
     <type>serial</type> 
     <title1>movie_title1</title1> 
     <title2>movie_title2</title2> 
     <year>some_year</year> 
     <runtime>some_runtime</runtime> 
     <poster> 
      <small url="url_of_small_poster" /> 
      <medium url="url_of_medium_poster" /> 
      <big url="url_of_big_poster" /> 
     </poster> 
     <url>movies_url</url> 
     <imdb rating="5.0" votes="67" /> 
    </movie> 
    <movie>...</movie>... 
</response> 

我要分析此XML的字符串的所有值,并且把值填补我的课:

public class MoviesClass 
{ 
    String Id{get;set;} 
    String Type{get;set;} 
    String Title1{get;set;} 
    String Title2{get;set;} 
    Int32 Year{get;set;} 
    String SmallPostersURL{get;set;} 
    String MediumPostersURL{get;set;} 
    String BigPostersURL{get;set;} 
    String MoviesURL{get;set;} 
    Single IMDB_Rating{get;set;} 
    Single IMDB_Votes{get;set;} 
} 

我怎么做到的?我如何使用LINQ获取这个值?

+0

我只是用这最后一周: https://stackoverflow.com/questions/13073260/extracting-data-from-a-complex-xml-with-linq?rq=1 希望这可以帮助!祝你好运! – user3303858

+1

试试这个http://blog.kushdilip.com/2014/01/converting-csv-to-xml-and-then-to-c.html。首先是CSV到XML,然后是XML到列表。希望这可以帮助。 – kushdilip

回答

1
var xDoc = XDocument.Load("path"); 

var values = 
      xDoc.Descendants("movie") 
       .Select(
        x => 
         new MoviesClass 
         { 
          Id = (string) x.Element("id"), 
          Type = (string) x.Element("type"), 
          Title1 = (string) x.Element("title1"), 
          Title2 = (string) x.Element("title2"), 
          Year = (int)x.Element("year"), 
          Runtime = (string)x.Element("runtime"), 
          SmallPostersURL = (string)x.Element("poster").Element("small").Attribute("url"), 
          MediumPostersURL = (string)x.Element("poster").Element("medium").Attribute("url"), 
          BigPostersURL = (string)x.Element("poster").Element("big").Attribute("url"), 
          MoviesURL = (string)x.Element("url"), 
          IMDB_Rating = (float)x.Element("imdb").Attribute("rating"), 
          IMDB_Votes = (float)x.Element("imdb").Attribute("votes") 
         }); 
+0

非常感谢。您的帖子非常有帮助。我添加了一点方法,现在一切都很好。我可以将SmallPostersURL =(string)x.Element(“poster”)。Element(“small”)。属性(“url”)替换为SmallPostersURL = TestClass.TryGetElementValue (x,“poster \\ small”,“url” ) – Mixim