创建实体的最佳方式使用LINQ XML对象 [英] Best way to create entity objects from xml using LINQ

查看:117
本文介绍了创建实体的最佳方式使用LINQ XML对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下code创建从源代码 XML 对象的列表。我可以得到需要的结果在 VAR查询变量。什么是创造最好的方式名单,其中,视频> 从这个结果

注:preFER 方法链接办法如果可能的话

code

 类节目
{
    静态无效的主要(字串[] args)
    {
        字符串xmlStringInput = @< videoShop>
                                  <视频标题=VIDEO1,路径=视频\ video1.wma><董事GT; Speilberg< /董事GT;< /视频>
                                  <视频标题=视频2,路径=视频\ video2.wma/>
                                &所述; / videoShop>中;

        的XDocument myDoc = XDocument.Parse(xmlStringInput);


        VAR videoElements =(从myDoc.Descendants视频(视频)选择视频).ToList();
        的foreach(在videoElements VAR videoEle)
        {
            //System.Xml.XPath命名空间XPathSelectElement
            VAR directorName = videoEle.XPathSelectElement(@董事);
        }


        VAR的查询=从视频中myDoc.Descendants(视频)
                    选择新
                    {
                        MyTitle = video.Attribute(标题),价值,
                        mypath中= video.Attribute(路径)。值
                    };

        // IEnumerable的<的XElement>元素=(IEnumerable的<的XElement>)查询;
        //名单,其中,视频> videoLibrary =(名单<视频>)query.ToList<视频>();

        Console.WriteLine(查询);
        到Console.ReadLine();

    }

}
 

实体

 公共类视频
 {
     公共字符串MyTitle {获得;组; }
     公共字符串mypath中{获得;组; }
 }
 

参考

  1. <一个href="http://stackoverflow.com/questions/299747/whats-the-most-efficient-way-to-locate-and-set-element-values-in-an-xdocument">What's最有效的方法,在一个XDocument定位并设置元素的值?
  2. <一个href="http://stackoverflow.com/questions/2542184/how-do-i-get-a-list-of-child-elements-from-xdocument-object">How做我从XDocument对象的子元素的列表?
  3. 创建的XML对象
  4. <一个href="http://stackoverflow.com/questions/1980263/c-sharp-linq-with-xml-cannot-extract-multiple-fields-with-same-name-into-object?rq=1">C# LINQ和XML,不能提取具有相同名称为对象
  5. 多个领域
  6. <一个href="http://stackoverflow.com/questions/4251215/how-to-get-xelements-value-and-not-value-of-all-child-nodes">How让所有的孩子节点的XElement的价值,而不是价值?
解决方案

  VAR的查询=从VIN myDoc.Descendants(视频)
            选择新视频
            {
                MyTitle =(字符串)v.Attribute(标题),
                mypath中=(字符串)v.Attribute(路径)
            };

// VAR是指名单,其中,视频&GT;这里
变种结果= query.ToList();
 

或者没有查询变量:

  //变种意味着名单,其中,视频&GT;这里
VAR的结果=(从VIN myDoc.Descendants(视频)
               选择新视频
               {
                   MyTitle =(字符串)v.Attribute(标题),
                   mypath中=(字符串)v.Attribute(路径)
               })了ToList()。
 

方法为基础的查询:

  VAR的结果= myDoc.Descendants(视频)
                   。选择(V =&gt;新建视频()
                                {
                                    MyTitle =(字符串)v.Attribute(标题),
                                    mypath中=(字符串)v.Attribute(路径)
                                 })了ToList()。
 

I have following code for creating a list of objects from source XML. I can get the requires result in var query variable. What is the best way to create a List<Video> from this result?

Note: Prefer Method Chaining approach if possible.

CODE

class Program
{
    static void Main(string[] args)
    {
        string xmlStringInput = @"<videoShop>
                                  <video title=""video1"" path=""videos\video1.wma""><Director>Speilberg</Director></video>
                                  <video title=""video2"" path=""videos\video2.wma""/>
                                </videoShop>";

        XDocument myDoc = XDocument.Parse(xmlStringInput);


        var videoElements = (from video in myDoc.Descendants("video") select video).ToList();
        foreach (var videoEle in videoElements)
        {
            //System.Xml.XPath namespace for XPathSelectElement
            var directorName = videoEle.XPathSelectElement(@"Director");
        }


        var query = from video in myDoc.Descendants("video")
                    select new
                    {
                        MyTitle = video.Attribute("title").Value,
                        MyPath = video.Attribute("path").Value
                    };

        //IEnumerable<XElement> elements = (IEnumerable<XElement>)query;
        //List<Video> videoLibrary = (List<Video>)query.ToList<Video>();

        Console.WriteLine(query);
        Console.ReadLine();

    }

}

Entity

 public class Video
 {
     public string MyTitle { get; set; }
     public string MyPath { get; set; }
 }

REFERENCE:

  1. What's the most efficient way to locate and set element values in an XDocument?
  2. How do I get a list of child elements from XDocument object?
  3. Creating objects from XML
  4. C# LINQ with XML, cannot extract multiple fields with same name into object
  5. How to get XElement's value and not value of all child-nodes?

解决方案

var query = from vin myDoc.Descendants("video")
            select new Video
            {
                MyTitle = (string)v.Attribute("title"),
                MyPath = (string)v.Attribute("path")
            };

// var means List<Video> here
var results = query.ToList();

Or without query variable:

// var means List<Video> here
var results = (from vin myDoc.Descendants("video")
               select new Video
               {
                   MyTitle = (string)v.Attribute("title"),
                   MyPath = (string)v.Attribute("path")
               }).ToList();

Method-based query:

var results = myDoc.Descendants("video")
                   .Select(v => new Video()
                                {
                                    MyTitle = (string)v.Attribute("title"),
                                    MyPath = (string)v.Attribute("path")
                                 }).ToList();

这篇关于创建实体的最佳方式使用LINQ XML对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆