要的XDocument对象的名单 [英] XDocument to List of object

查看:137
本文介绍了要的XDocument对象的名单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一个XDocument的内容是XML以下

我想获得一个List(),请参阅此消息的结尾。

 <与myXML>
  < myDatas code =01>
    < myVar的名字=myvar的值=A/>
    < myData的名字=A值=A1/>
    < myData的名字=B值=B1/>
  < / myDatas>
  < myDatas code =02>
    < myVar的名字=myvar的值=B/>
    < myData的名字=A值=A2/>
    < myData的名字=D值=D2/>
  < / myDatas>
< /与myXML>

公共类迈德特
{
    公共字符串主要code {获得;组; }
    公共字符串code {获得;组; }
    公共字符串值{获得;组; }
}
 

我想一个List()这个内容应该是这样的:

 新迈德特{主要code =01; code =A;值=A1};
新迈德特{主要code =01; code =B;值=B1};
新迈德特{主要code =02; code =A;值=A2};
新迈德特{主要code =02; code =D;值=D2};
 

解决方案

当然 - 所以你需要的东西是这样的:

  VAR的查询=从doc.Root.Elements DATAS(myDatas)
            让code =(字符串)datas.Attribute(code)
            从在datas.Elements数据(myData的)
            选择新迈德特{
                主要code = code,
                code =(字符串)data.Attribute(姓名),
                值=(字符串)data.Attribute(价值),
            };

VAR列表= query.ToList();
 

请注意多条款扁平化的结果。

另一种方法本来只找到所有的叶子元素,并获取code部分从父:

  VAR的查询=从doc.Descendants数据(myData的)
            选择新迈德特{
                主要code =(字符串)data.Parent.Attribute(code),
                code =(字符串)data.Attribute(姓名),
                值=(字符串)data.Attribute(价值),
            };

VAR列表= query.ToList();
 

编辑:如果你的文档使用名称空间,这是一件容易的事:

 的XNamespace NS =HTTP://的-URI即用的名称空间;
VAR的查询=从数据doc.Descendants(NS +的myData)
            ...
 

本使用的XName运营商+(的XNamespace,字符串)重载运算符。

The content of an XDocument is the XML below.

I'd like to get a List(), see at the end of this message.

<myXml>
  <myDatas code="01">
    <myVar name="myvar" value="A" />
    <myData name="A" value="A1" />
    <myData name="B" value="B1" />
  </myDatas>
  <myDatas code="02">
    <myVar name="myvar" value="B" />
    <myData name="A" value="A2" />
    <myData name="D" value="D2" />
  </myDatas>
</myXml>

public class MyData
{
    public string MainCode { get; set; }
    public string Code { get; set; }
    public string Value { get; set; }
}

I'd like a List() this content should be like this :

new MyData { MainCode = "01"; Code = "A"; Value = "A1" };
new MyData { MainCode = "01"; Code = "B"; Value = "B1" };
new MyData { MainCode = "02"; Code = "A"; Value = "A2" };
new MyData { MainCode = "02"; Code = "D"; Value = "D2" };

解决方案

Sure - so you need something like this:

var query = from datas in doc.Root.Elements("myDatas")
            let code = (string) datas.Attribute("code")
            from data in datas.Elements("myData")
            select new MyData {
                MainCode = code,
                Code = (string) data.Attribute("name"),
                Value = (string) data.Attribute("value"),
            };

var list = query.ToList();

Note the multiple from clauses to flatten the results.

Another alternative would have been to just find all the "leaf" elements and fetch the code part from the parent:

var query = from data in doc.Descendants("myData")
            select new MyData {
                MainCode = (string) data.Parent.Attribute("code"),
                Code = (string) data.Attribute("name"),
                Value = (string) data.Attribute("value"),
            };

var list = query.ToList();

EDIT: If your document uses namespaces, that's easy too:

XNamespace ns = "http://the-uri-of-the-namespace";
var query = from data in doc.Descendants(ns + "myData")
            ...

This uses the XName operator +(XNamespace, string) overloaded operator.

这篇关于要的XDocument对象的名单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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