Linq to XML选择最多2级的祖先

时间:2011-11-23 12:48:45

标签: .net linq linq-to-xml

鉴于下面的XML,我需要以递归方式选择position.position.manager位置与位置参数匹配的员工。

如何使用linq to XML实现这一目标?

<employee id="0004000">
    <!-- ... -->
</employee>
<employee id="0004001">
     <username>Administrator</username>
     <positions>
      <position id="00008001" isPrimary="1">
       <title>GENERAL MANAGER</title>
       <manager_position>00008431</manager_position>
      </position>
     </positions>
</employee>
<employee id="0004002">
    <!-- ... -->
</employee>

2 个答案:

答案 0 :(得分:1)

你可以这样做:

employees.Where(e => e.Element("positions")
                      .Elements("position")
                      .Elements("manager_position")
                      .Any(mp => mp.Value == position))

选择那些至少有一个manager_position元素与您正在寻找的帖子相匹配的员工。

答案 1 :(得分:1)

此示例将在找不到匹配的员工时返回匹配的员工XElementnull

var employees = XElement.Parse(
    "<employees><employee><!-- ... --></employee></employees>");

var results = employees
    .Elements("employee")
    .Where(e => e.Descendants("manager_position").Value == "00008431")
    .SingleOrDefault();

另见: