/// /根据元素的名称进行筛选(有命名空间)
// XNamespace aw = " http://www.adventure-works.com ";
// XElement po = XElement.Load("PurchaseOrderInNamespace.xml");
// IEnumerable<XElement> items =
// from el in po.Descendants(aw + "ProductName")
// select el;
// foreach (XElement prdName in items)
// Console.WriteLine(prdName.Name + ":" + (string)prdName);
/// /链接轴方法
// XElement purchaseOrders = XElement.Load("PurchaseOrders.xml");
// IEnumerable<XElement> names =
// from el in purchaseOrders
// .Elements("PurchaseOrder")
// .Elements("Address")
// .Elements("Name")
// select el;
// foreach (XElement e in names)
// Console.WriteLine(e);
/// /链接轴方法,有时,当可能存在或不存在间隔上级时,您希望在特定的元素深度,检索所有的元素
// XElement root = XElement.Load("Irregular.xml");
// IEnumerable<XElement> configParameters =
// root.Elements("Customer").Elements("Config").
// Elements("ConfigParameter");
// foreach (XElement cp in configParameters)
// Console.WriteLine(cp);
/// /检索单个子元素
// XElement po = XElement.Load("PurchaseOrder.xml");
// XElement e = po.Element("DeliveryNotes");
// Console.WriteLine(e);
/// /检索索性的集合
// XElement val = new XElement("Value",
// new XAttribute("ID", "1243"),
// new XAttribute("Type", "int"),
// new XAttribute("ConvertableTo", "double"),
// "100");
// IEnumerable<XAttribute> listOfAttributes =
// from att in val.Attributes()
// select att;
// foreach (XAttribute a in listOfAttributes)
// Console.WriteLine(a);
/// /检索单个属性
// XElement cust = new XElement("PhoneNumbers",
// new XElement("Phone",
// new XAttribute("type", "home"),
// "555-555-5555"),
// new XElement("Phone",
// new XAttribute("type", "work"),
// "555-555-6666")
// );
// IEnumerable<XElement> elList =
// from el in cust.Descendants("Phone")
// select el;
// foreach (XElement el in elList)
// Console.WriteLine((string)el.Attribute("type"));
/// /检索属性值
// XElement root = new XElement("Root",
// new XAttribute("Attr", "abcde")
// );
// Console.WriteLine(root);
// string str = (string)root.Attribute("Attr");
// Console.WriteLine(str);
#endregion
#region 基本查询
/// /查找具有特定属性的元素
// XElement root = XElement.Load("PurchaseOrder.xml");
// IEnumerable<XElement> address =
// from el in root.Elements("Address")
// where (string)el.Attribute("Type") == "Billing"
// select el;
// foreach (XElement el in address)
// Console.WriteLine(el);
/// /查找具有特定子元素的元素
// XElement root = XElement.Load("TestConfig.xml");
// IEnumerable<XElement> tests =
// from el in root.Elements("Test")
// where (string)el.Element("CommandLine") == "Examp2.EXE"
// select el;
// foreach (XElement el in tests)
// Console.WriteLine((string)el.Attribute("TestId"));
// 查询 XDocument 与查询 XElement
// // Create a simple document and write it to a file
// File.WriteAllText("Test.xml", @"<Root>
// <Child1>1</Child1>
// <Child2>2</Child2>
// <Child3>3</Child3>
// </Root>");
// Console.WriteLine("Querying tree loaded with XElement.Load");
// Console.WriteLine("----");
// XElement doc = XElement.Load("Test.xml");
// IEnumerable<XElement> childList =
// from el in doc.Elements()
// select el;
// foreach (XElement e in childList)
// Console.WriteLine(e);
// Console.WriteLine("Querying tree loaded with XDocument.Load");
// Console.WriteLine("----");
// XDocument doc = XDocument.Load("Test.xml");
// IEnumerable<XElement> childList =
// from el in doc.Elements()
// select el;
// foreach (XElement e in childList)
// Console.WriteLine(e);
// // 查找具有特定元素名称的子代
// XElement root = XElement.Parse(@"<root>
// <para>
// <r>
// <t>Some text </t>
// </r>
// <n>
// <r>
// <t>that is broken up into </t>
// </r>
// </n>
// <n>
// <r>
// <t>multiple segments.</t>
// </r>
// </n>
// </para>
// </root>");
// IEnumerable<string> textSegs =
// from seg in root.Descendants("t")
// select (string)seg;
// string str = textSegs.Aggregate(new StringBuilder(),
// (sb, i) => sb.Append(i),
// sp => sp.ToString()
// );
// Console.WriteLine(str);
// // 使用 Descendants 方法查找单个后代
// XElement root = XElement.Parse(@"<Root>
// <Child1>
// <GrandChild1>GC1 Value</GrandChild1>
// </Child1>
// <Child2>
// <GrandChild2>GC2 Value</GrandChild2>
// </Child2>
// <Child3>
// <GrandChild3>GC3 Value</GrandChild3>
// </Child3>
// <Child4>
// <GrandChild4>GC4 Value</GrandChild4>
// </Child4>
// </Root>");
// string grandChild3 = (string)
// (from el in root.Descendants("GrandChild3")
// select el).First();
// Console.WriteLine(grandChild3);
/// /编写使用复杂筛选的查询
// XElement root = XElement.Load("PurchaseOrders.xml");
// IEnumerable<XElement> purchaseOrders =
// from el in root.Elements("PurchaseOrder")
// where
// (from add in el.Elements("Address")
// where
// (string)add.Attribute("Type") == "Shipping" &&
// (string)add.Element("State") == "NY"
// select add)
// .Any()
// select el;
// foreach (XElement el in purchaseOrders)
// Console.WriteLine((string)el.Attribute("PurchaseOrderNumber"));
// // 筛选可选元素
// XElement root = XElement.Parse(@"<Root>
// <Child1>
// <Text>Child One Text</Text>
// <Type Value=""Yes""/>
// </Child1>
// <Child2>
// <Text>Child Two Text</Text>
// <Type Value=""Yes""/>
// </Child2>
// <Child3>
// <Text>Child Three Text</Text>
// <Type Value=""No""/>
// </Child3>
// <Child4>
// <Text>Child Four Text</Text>
// <Type Value=""Yes""/>
// </Child4>
// <Child5>
// <Text>Child Five Text</Text>
// </Child5>
// </Root>");
// var cList =
// from typeElement in root.Elements().Elements("Type")
// where (string)typeElement.Attribute("Value") == "Yes"
// select (string)typeElement.Parent.Element("Text");
// foreach (string str in cList)
// Console.WriteLine(str);
/// /对元素进行排序
// XElement root = XElement.Load("Data.xml");
// IEnumerable<decimal> prices =
// from el in root.Elements("Data")
// let price = (decimal)el.Element("Price")
// orderby price
// select price;
// foreach (decimal el in prices)
// Console.WriteLine(el);
/// /对多个键上的元素进行排序
// XElement co = XElement.Load("CustomersOrders.xml");
// var sortedElements =
// from c in co.Element("Orders").Elements("Order")
// orderby (string)c.Element("ShipInfo").Element("ShipPostalCode"),
// (DateTime)c.Element("OrderDate")
// select new
// {
// CustomerID = (string)c.Element("CustomerID"),
// EmployeeID = (string)c.Element("EmployeeID"),
// ShipPostalCode = (string)c.Element("ShipInfo").Element("ShipPostalCode"),
// OrderDate = (DateTime)c.Element("OrderDate")
// };
// foreach (var r in sortedElements)
// Console.WriteLine("CustomerID:{0} EmployeeID:{1} ShipPostalCode:{2} OrderDate:{3:d}",
// r.CustomerID, r.EmployeeID, r.ShipPostalCode, r.OrderDate);
// 计算中间值
// XElement root = XElement.Load("Data.xml");
// IEnumerable<decimal> extensions =
// from el in root.Elements("Data")
// let extension = (decimal)el.Element("Quantity") * (decimal)el.Element("Price")
// where extension >= 25
// orderby extension