鉴于下面的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>
答案 0 :(得分:1)
你可以这样做:
employees.Where(e => e.Element("positions")
.Elements("position")
.Elements("manager_position")
.Any(mp => mp.Value == position))
选择那些至少有一个manager_position
元素与您正在寻找的帖子相匹配的员工。
答案 1 :(得分:1)
此示例将在找不到匹配的员工时返回匹配的员工XElement或null
:
var employees = XElement.Parse(
"<employees><employee><!-- ... --></employee></employees>");
var results = employees
.Elements("employee")
.Where(e => e.Descendants("manager_position").Value == "00008431")
.SingleOrDefault();
另见: