"where"查询使用linq xml

sf.*_*sf. 1 c# xml linq

一直在试图弄清楚如何执行linq xml查询.

我希望查询返回以下xml中category/name ="First Category"的所有"product"项的列表

<catalog>
  <category>
    <name>First Category</name>
    <order>0</order>
    <product>
      <name>First Product</name>
      <order>0</order>
    </product>
    <product>
      <name>3 Product</name>
      <order>2</order>
    </product>
    <product>
      <name>2 Product</name>
      <order>1</order>
    </product>
  </category>
</catalog>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

像这样:

    XDocument doc = XDocument.Parse(xml);
    var qry = from cat in doc.Root.Elements("category")
              where (string)cat.Element("name") == "First Category"
              from prod in cat.Elements("product")
              select prod;
Run Code Online (Sandbox Code Playgroud)

或者也许是匿名类型:

    XDocument doc = XDocument.Parse(xml);
    var qry = from cat in doc.Root.Elements("category")
              where (string)cat.Element("name") == "First Category"
              from prod in cat.Elements("product")
              select new
              {
                  Name = (string)prod.Element("name"),
                  Order = (int)prod.Element("order")
              };
    foreach (var prod in qry)
    {
        Console.WriteLine("{0}: {1}", prod.Order, prod.Name);
    }
Run Code Online (Sandbox Code Playgroud)