5

这是我的 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;

我怎样才能收集所选产品的所有项目?

4

1 回答 1

7

当然:

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

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

于 2012-05-11T13:40:56.703 回答