开发者

Linq to XML Queries

开发者 https://www.devze.com 2023-03-06 00:10 出处:网络
Let\'s jus开发者_如何学运维t say I have an XML file that looks like this: <?xml version=\"1.0\" encoding=\"utf-8\"?>

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
0

精彩评论

暂无评论...
验证码 换一张
取 消