从Descendants获取xml元素列表

时间:2012-05-11 13:37:17

标签: 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>

下面的代码只返回第一个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;

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

1 个答案:

答案 0 :(得分:7)

不确定

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

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