如何从XML中提取数据

时间:2014-02-13 02:04:36

标签: c# xml linq

我的程序从网络服务器接收了下一个数据:

<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获取此值?

1 个答案:

答案 0 :(得分: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")
                        });