Linq to XML Queries
Let's jus开发者_如何学运维t say I have an XML file that looks like this:
<?xml version="1.0" encoding="utf-8"?>
<Customers>
<Customer Name="Jason Voorhees" WeaponPurchased="Machette" SalePrice="499.90" />
<Customer Name="Michael Myers" WeaponPurchased="Kitchen Knife" SalePrice="96.75" />
</Customers>
Is it possible, with Linq, to do something like this:?
foreach customer in Customers select WeaponPurchased where Name equals "Jason Voorhees"
or:
foreach customer in Customers select customer
label1.Text += "Name: " + customer.Name + Environment.NewLine + "WeaponPurchased: " + customer.WeaponPurchased;
I've seen this type of query before on MSDN, but the links in my favorites lead to the wrong page now, and I'm still trying to find these particular examples. Any help is much appreciated,
Thank you
Try this:
var doc = XDocument.Load(Path.Combine(path, "file.xml"));
var query = from c in doc.Descendants("Customer")
where c.Attributes("Name").Single().Value == "Jason Voorhees"
select c.Attributes("WeaponPurchased").Single().Value;
It will return IEnumerable<string>
with names of weapons.
Try to use this query
XElement root = XDocument.Load(path).Root;
var result = root.Elements("Customers").
Where(x => x.Attribute("Name").Value =="Jason Voorhees").
Select(x => x.Attribute("WeaponPurchased").Value));
Or you can try to create classes which a defined in xml and deserialize them.
try this
public class Customer
{
public string Name { get; set; }
public string WeaponPurchased { get; set; }
public string SalePrice { get; set; }
}
and query the xml like below
var customer = from c in XDocument.Load("XMLPATH").Descendants("Customer")
where (string)c.Attribute("Name")=="Jason Voorhees"
select new Customer
{
Name=(string)c.Attribute("Name"),
WeaponPurchased = (string)c.Attribute("WeaponPurchased"),
SalePrice = (string)c.Attribute("SalePrice"),
};
foreach (var item in customer)
{
Console.WriteLine(item.WeaponPurchased);
}
Not quite.
You want to find a Customer
where an attribute has a certain value, and then select a second attribute.
Something more like this:
from customer in Customers
where customer.Attribute("Name").Value equals "Jason Voorhees"
select customer.Attribute("WeaponPurchased").Value
精彩评论