从Descendants获取xml元素列表

Bar*_*ara 3 c# xml linq-to-xml

这是我的Xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<dati>
  <product id="456">
    <item>a</item>
    <item>b</item>
    <item>c</item>
  </product>
  <product id="789">
    <item>a</item>
    <item>b</item>
  </product>
  <product id="533">
    <item>a</item>
  </product>
</dati>
Run Code Online (Sandbox Code Playgroud)

下面的代码只返回第一个item.InnerText元素

List<string> lst = new List<string>();
XDocument Doc = XDocument.Load("test.xml");

var q = from c in Doc.Descendants("product")
        where c.Attribute("id").Value == "789"
        select c.Element("item");

foreach (string name in q)
       lst.Add(name);

listBox1.DataSource = lst;
Run Code Online (Sandbox Code Playgroud)

如何收集所选产品的所有商品?

Jon*_*eet 7

当然:

var list = Doc.Descendants("product")
              .Single(c => c.Attribute("id").Value == "789")
              .Elements("item")
              .Select(item => (string) item)
              .ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,这采用了稍微不同的方法 - 它检查是否只有一个匹配的产品元素(通过查找它),然后选择其item下面的元素,将每个元素投影到其值.然后它以相当简洁的方式将这些字符串转换为列表:)