Linq XML查询 - 如何在其自己的嵌套节点中返回满足条件的节点?

时间:2011-03-17 22:31:59

标签: c# xml linq

我有以下xml结构:

<?xml version="1.0" encoding="utf-8" ?>
<administrators>
   <administrator>
    <fullname>full name1</fullname>
    <email>email1@email.com</email>
    <provinces>
      <province>3</province>
      <province>9</province>
    </provinces>
  </administrator>
  <administrator>
    <fullname>full name2</fullname>
    <email>email2@email.com</email>
    <provinces>
      <province>1</province>
      <province>2</province>
    </provinces>
  </administrator>
</administrators>

我希望能够返回具有特定省节点的管理员节点。我尝试过以下方法:

IEnumerable<Administrator> admins = RootElement.Elements("administrator")
        .Where(x => x.Elements("provinces")
                .Any(p => int.Parse(p.Element("province").Value) == provinceId))
        .Select(x => new Administrator()
        {
            FullName = x.Element("fullname").Value,
            Email = x.Element("email").Value
        });

我的结果集是空的。

那我在这里错过了什么?如果provinceId = 3,如何选择省级元素等于provinceId的管理员元素?

3 个答案:

答案 0 :(得分:3)

这是使用XPath的好例子:

  RootElement.XPathSelectElements("//administrator[provinces/province = '" + provinceId + "']");

答案 1 :(得分:0)

答案 2 :(得分:0)

    var admins = RootElement.Elements("administrator")
.Where( a => a.Descendants("province").Any( p => int.Parse(p.Value) == provinceId ) );