尝试提取"队列"的列表将元素放入新的Queue对象列表中。我有以下xml:
<MSMQData>
<Queues>
<Queue env="LOCAL" server="WORK150">FormatName:DIRECT=OS:WKSTN150\private$\localqueue1</Queue>
<Queue env="TEST" server="TEST01">FormatName:DIRECT=OS:dev-test01\private$\testqueue</Queue>
<Queue env="PROD" server="empty"></Queue>
<Queue env="PROD" server="empty"></Queue>
</Queues>
</MSMQData>
这里的代码显然没有让我回到我试图检索的队列元素列表。我在这里缺少什么?
var queues = (from col in xmlMSMQLoad.Descendants("Queues")
select col)
.Select(c => new Queue
{
Environment = c.Element("Queue").Attribute("env").Value,
Server = c.Element("Queue").Attribute("server").Value,
QueueName = c.Element("Queue").Value
})
.ToList();
顺便说一句,我确实有一个名为Queue
的类,其中包含这些属性。
答案 0 :(得分:7)
您当前的方法发现“队列”然后只选择第一个“队列”项。它没有抓住所有这些。你想要做的是使用Descendants("Queue")
或首先选择“Queues”元素,然后选择它的“Queue”元素。
请改用此查询:
var queues = (from c in xml.Element("Queues").Elements("Queue")
select new Queue
{
Environment = c.Attribute("env").Value,
Server = c.Attribute("server").Value,
QueueName = c.Value
}).ToList();
答案 1 :(得分:1)
在c.Element("Queue")
:
c
是"Queues"
元素,c.Element("Queue")
是第一个 "Queue"
元素。因此,你只能获得第一个。
答案 2 :(得分:1)
var queues = doc
.Descendants("Queue")
.Select(x => new Queue
{
Env = x.Attribute("env").Value,
Server = x.Attribute("server").Value,
QueueName = x.Value
})
.ToList();
你是linq有点搞砸了。通过选择“队列”后代,您可以迭代它们,而不是总是在选择中选择第一个“队列”节点。我从来都不喜欢长形式的linq,从来没有运气结合链式和长形式。希望这有帮助!