C# 使用linq to XML从XML文档获取XElements列表的XElements列表
我创建节点对象的列表:C# 使用linq to XML从XML文档获取XElements列表的XElements列表,c#,.net,xml,linq,linq-to-xml,C#,.net,Xml,Linq,Linq To Xml,我创建节点对象的列表: public class Node { public string Key { get; set; } public string Value { get; set; } } public class ListNode : List<Node> { } 公共类节点 { 公共字符串密钥{get;set;} 公共字符串值{get;set;} } 公共类ListNode:列表{} 我有一个xml文档: <details> <
public class Node
{
public string Key { get; set; }
public string Value { get; set; }
}
public class ListNode : List<Node> { }
公共类节点
{
公共字符串密钥{get;set;}
公共字符串值{get;set;}
}
公共类ListNode:列表{}
我有一个xml文档:
<details>
<detail>
<node>
<key>xxx</key>
<value>111</value>
</node>
<node>
<key>yyy</key>
<value>222</value>
</node>
</detail>
<detail>
<node>
<key>zzz</key>
<value>333</value>
</node>
<node>
<key>aaa</key>
<value>444</value>
</node>
</detail>
</details>
xxx
111
yyy
222
zzz
333
aaa
444
我要做的是使用linq to xml将这些xml元素放到ListNode对象列表中:
<node> => Node Object
<detail> => ListNode
<details> => List<ListNode>
=>节点对象
=>列表节点
=>列表
这是我的linq到xml请求:
List<ListNode> listNodeDetails = xElement
.Element("details")
.Elements("detail")
.Elements("node")
.Select(n => new Node()
{ Key = n.Element("key").Value,
Value = n.Element("node").Element("value").Value
})
.ToList();
List listNodeDetails=xElement
.要素(“细节”)
.要素(“细节”)
.元素(“节点”)
.Select(n=>newnode()
{Key=n.Element(“Key”)值,
值=n.元素(“节点”).元素(“值”).值
})
.ToList();
你还没有说你被困在哪里。。。不管怎么说,这应该能奏效
var xdoc = XDocument.Load("Test.xml");
var listNodeDetails = xdoc.Root
.Elements("detail")
.Elements("node").Select(
n => new Node
{
Key = n.Element("key").Value,
Value = n.Element("value").Value
}).ToList();
你还没说你被困在哪里。。。不管怎么说,这应该能奏效
var xdoc = XDocument.Load("Test.xml");
var listNodeDetails = xdoc.Root
.Elements("detail")
.Elements("node").Select(
n => new Node
{
Key = n.Element("key").Value,
Value = n.Element("value").Value
}).ToList();
首先,您实际上不需要
节点
或列表节点
类。您应该能够使用KeyValuePair
(或Tuple
)和List
(或List
)获得相同的结果。以下是如何通过列表获得所需结果的方法
在这里,您必须在添加节点之前创建一个ListNode
,而不是使用ToList
扩展方法。您可以将foreach
转换为linq表达式,但我通常尽可能避免使用包含多个语句的lambda。首先,您并不真正需要节点
或列表节点
类。您应该能够使用KeyValuePair
(或Tuple
)和List
(或List
)获得相同的结果。以下是如何通过列表获得所需结果的方法
在这里,您必须在添加节点之前创建一个ListNode
,而不是使用ToList
扩展方法。您可以将foreach
转换为linq表达式,但我通常尽可能避免lambda使用多个语句。问题是什么?你得到的是错误还是错误的结果?如果是,请包括错误或您得到的结果。我想将xml节点恢复为ListNode对象列表xml中是否包含多个元素?只有在这种情况下,列出ListNode元素才有意义。@Giorgosbetos该示例有多个详细节点。这就是我认为OP将节点分离为单独的ListNode
s的原因。问题是什么?你得到的是错误还是错误的结果?如果是,请包括错误或您得到的结果。我想将xml节点恢复为ListNode对象列表xml中是否包含多个元素?只有在这种情况下,列出ListNode元素才有意义。@Giorgosbetos该示例有多个详细节点。这就是我认为OP将节点分离为单独的ListNode
s的方式。当OP想要一个List
时,这会产生一个List
,而实际上它只是一个List
。基本上OP希望不同细节元素中的节点位于单独的列表中。我不想要节点列表,而是listNode类列表,如下图所示,listNode类是节点类列表,假设listNode类对应于一行,node类对应于一列,当OP需要一个实际上只是一个列表的列表时,这会产生一个列表。基本上,OP希望不同细节元素中的节点位于单独的列表中。我不想要节点列表,而是listNode类列表,如下图所示,listNode类是节点类列表,假设listNode类对应于一行,而node类对应于一列
List<ListNode> list = new List<ListNode>();
foreach (var detail in element.Elements("detail"))
{
var nodeList = new ListNode();
nodeList.AddRange(
detail.Elements("node")
.Select(
n => new Node
{
Key = n.Element("key").Value,
Value = n.Element("value").Value
}));
list.Add(nodeList);
}