我的XML看起来像这样:
<order>
<order_number>1N</order_number>
<execution_data>
<exe_date>11/01/2011</exe_date>
<exe_name>Joe</exe_name>
</execution_data>
<execution_data>
<exe_date>12/01/2011</exe_date>
<exe_name>Mike</exe_name>
</execution_data>
<execution_data>
<exe_date>8/01/2011</exe_date>
<exe_name>Steve</exe_name>
</execution_data>
</order>
<order>
<order_number>2N</order_number>
<execution_data>
<exe_date>11/01/2011</exe_date>
<exe_name>Rob</exe_name>
</execution_data>
<execution_data>
<exe_date>12/01/2011</exe_date>
<exe_name>Marko</exe_name>
</execution_data>
<execution_data>
<exe_date>8/01/2011</exe_date>
<exe_name>Sam</exe_name>
</execution_data>
</order>
<order>
<order_number>3N</order_number>
<execution_data>
<exe_date>11/01/2011</exe_date>
<exe_name>Nick</exe_name>
</execution_data>
<execution_data>
<exe_date>12/01/2011</exe_date>
<exe_name>Ashley</exe_name>
</execution_data>
<execution_data>
<exe_date>8/01/2011</exe_date>
<exe_name>Marc</exe_name>
</execution_data>
</order>
public class ExecutionItem
{
public string Date {get;set;}
public string Name {get;set;}
}
public class Response
{
public List<ExecutionItem> ExecutionItems{get;set;}
}
如何选择order_number
等于1N
的订单,然后使用LINQ从该订单中获取所有execution_data
?
这里有两种方法:
- 您可以查找值为
1N
的所有<order_number>
元素,然后查找所有同级execution_data
元素 - 您可以找到具有相关
order_number
元素的order
元素,然后找到子execution_data
元素
我可能会选择后一种方法,类似于:
var executionDataElements =
doc.Descendants("order")
.Where(order => (string) order.Element("order_number") == "1N")
.SelectMany(order => order.Elements("execution_data");
(请注意,如果这与多个订单匹配,您将从所有匹配的订单中获得所有元素。)
第一种方法如果您知道execution_data
元素在order_number
元素之后,并且如果您知道只有一个这样的order_number
元素,则为:
var executionDataElements = doc.Descendants("order_number")
.First(x => (string) x == "1N")
.ElementsAfterSelf("execution_data");