要的XDocument对象的名单 [英] XDocument to List of object
本文介绍了要的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屋!
查看全文