Linq to XElement,多个参数
Linq to XElement, multiple parameters
我正在创建一个 XElement
对象,但在使用 Linq 向节点添加多个元素时遇到问题。
有一个具有多个属性的对象列表:
class Point { int x; int y; ... }
List<Point> Points = new List<Point>()
{
new Point(1,2),
new Point(3,4)
};
我想使用单个构造函数(一次性)将此列表转换为平面 XElement
。
我想看的:
<Points>
<x>1</x>
<y>2</y>
<x>3</x>
<y>4</y>
</Points>
到目前为止我到达的最远距离:
new XElement("Points",
Points.Select(a => new {
X = new XElement("x", a.x),
Y = new XElement("y", a.y)
});
生成嵌套列表,解析为单个 XElement
。
<Points>{ X = <x>1</x>, Y = <y>2</y> }{ X = <x>3</x>, Y = <y>4</y> }</Points>
(我需要保留顺序,这样 union 就不起作用了)
我想像上面那样在构造函数中做所有事情,不想像这样手动添加点:
XElement PointsXml = new XElement("Points");
foreach (var item in Points)
{
PointsXml.Add(item.x);
PointsXml.Add(item.y);
}
以下方法可行:
var xml= new XElement("Points",
Points.SelectMany(a => new [] { new XElement("x", a.x), new XElement("y", a.y)}));
或者,如果您想将每个点包装在其自己的元素中,则:
var xml= new XElement("Points",
Points.Select(a =>
new XElement("Point", new XElement("x", a.x), new XElement("y", a.y))));
诀窍是始终添加 XElement
的对象。
您使用的代码将重新运行 anonymous object
而不是需要的这个 XElement 数组
我正在创建一个 XElement
对象,但在使用 Linq 向节点添加多个元素时遇到问题。
有一个具有多个属性的对象列表:
class Point { int x; int y; ... }
List<Point> Points = new List<Point>()
{
new Point(1,2),
new Point(3,4)
};
我想使用单个构造函数(一次性)将此列表转换为平面 XElement
。
我想看的:
<Points>
<x>1</x>
<y>2</y>
<x>3</x>
<y>4</y>
</Points>
到目前为止我到达的最远距离:
new XElement("Points",
Points.Select(a => new {
X = new XElement("x", a.x),
Y = new XElement("y", a.y)
});
生成嵌套列表,解析为单个 XElement
。
<Points>{ X = <x>1</x>, Y = <y>2</y> }{ X = <x>3</x>, Y = <y>4</y> }</Points>
(我需要保留顺序,这样 union 就不起作用了)
我想像上面那样在构造函数中做所有事情,不想像这样手动添加点:
XElement PointsXml = new XElement("Points");
foreach (var item in Points)
{
PointsXml.Add(item.x);
PointsXml.Add(item.y);
}
以下方法可行:
var xml= new XElement("Points",
Points.SelectMany(a => new [] { new XElement("x", a.x), new XElement("y", a.y)}));
或者,如果您想将每个点包装在其自己的元素中,则:
var xml= new XElement("Points",
Points.Select(a =>
new XElement("Point", new XElement("x", a.x), new XElement("y", a.y))));
诀窍是始终添加 XElement
的对象。
您使用的代码将重新运行 anonymous object
而不是需要的这个 XElement 数组