在 xelement 中查询 select 值

query for select value in xelement

我有一个这样的 XMl :

  <?xml version="1.0" encoding="utf-8"?>
  <Words>
     <List>
        <Cid Name="c1" ID="11">
          <Word Name="test1" ID="1">
            <Name>test1</Name>
            <Link>yahoo.com</Link>
          </Word>
        </Cid>
        <Cid Name="c2" ID="22">
          <Word Name="w0" ID="0">
            <Name>test0</Name>
            <Link>yahoo0.com</Link>
          </Word>
          <Word Name="w1" ID="1">
            <Name>test</Name>
            <Link>yahoo.com</Link>
          </Word>
          <Word Name="w1" ID="2">
            <Name>mehrdad</Name>
            <Link>google.com</Link>
          </Word>
        </Cid>
      </List>
  </Words>

我想搜索单词,如果节点存在,获取名称和 link
所以我尝试使用此代码进行搜索

XDocument doc = XDocument.Load(data);

            var relatedDocs =
                from CatID in
                doc.Elements("Cid")
                     .Where(x => (string)x.Attribute("ID").Value == ctId.ToString())
                     .Select(x => x.Elements("Word"))
                     .Where  (What is here ? don have access to Attribute so what ?)  (x => x.Attribute("Name").Value == sName)

                     select new SelectWord {
                         NameAtt = CatID.Attribute("Name").Value,
                         IDAtt = CatID.Attribute("ID").Value,
                         Name = CatID.Element("Name").Value,
                         Link = CatID.Element("URL").Value
                     };

这是 SelectWord class

class SelectWord
        {
            public string NameAtt { get; set; }
            public string IDAtt { get; set; }
            public string Name { get; set; }
            public string Link { get; set; }
        }

而且结果总是空的!
我认为我的查询有误,需要更改什么?

请试试这个:

var relatedDocs =
    from CatID in doc.Root.Element("List").Elements("Cid")
        .Where(x => x.Attribute("ID").Value == ctId.ToString())
        .SelectMany(x => x.Elements("Word")
            .Where(w => w.Attribute("Name").Value == sName))
    select new SelectWord
    {
        NameAtt = CatID.Attribute("Name").Value,
        IDAtt = CatID.Attribute("ID").Value,
        Name = CatID.Element("Name").Value,
        Link = CatID.Element("Link").Value
    };