Csharp/C Sharp/XML LINQ/Query

Материал из .Net Framework эксперт
Версия от 14:34, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

A Simple XML Query Using LINQ to XML

<source lang="csharp"> using System; using System.Linq; using System.Xml.Linq; public class MainClass {

   public static void Main() {
       XElement books = XElement.Parse(
         @"<books>
       <book>
         <title>P</title>
         <author>J</author>
       </book>
       <book>
         <title>W</title>
         <author>B</author>
       </book>
       <book>
         <title>C</title>
         <author>A</author>
       </book>
   </books>");
       var titles =
        from book in books.Elements("book")
        where (string)book.Element("author") == "J"
        select book.Element("title");
       foreach (var title in titles)
           Console.WriteLine(title.Value);
   }

}

</source>


Get Node by type with OfType

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Linq; using System.Reflection; using System.Xml.Linq; class Program {

   static void Main(string[] args) {
       XElement xml = XElement.Load("Employee.xml");
       IEnumerable<XComment> record = xml.Nodes().OfType<XComment>();
       foreach (XComment comment in record)
           Console.WriteLine(comment);
   }

}

</source>


Query string array by its element length

<source lang="csharp"> using System; using System.Linq; class HelloWorld {

   static void Main() {
       string[] words = { "hello", "wonderful", "linq", "beautiful", "world" };
       var shortWords = from word in words
                        where word.Length <= 5
                        select word;
       foreach (var word in shortWords)
           Console.WriteLine(word);
   }

}

</source>


Query XML document by attribute

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Linq; using System.Reflection; using System.Xml.Linq; class Program {

   static void Main(string[] args) {
       XElement xml = XElement.Load("Employee.xml");
       var query = from s in xml.Elements("salary").Elements("idperson")
                   where (int)s.Attribute("year") == 2004
                   select s;
       foreach (var record in query) {
           Console.WriteLine("Amount: {0}", (string)record.Attribute("salaryyear"));
       }
   }

}

</source>


Query XML document with Ancestors and First

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Linq; using System.Reflection; using System.Xml.Linq; class Program {

   static void Main(string[] args) {
       XElement xml = XElement.Load("Employee.xml");
       var record = xml.Descendants("firstname").First();
       foreach (var tag in record.Ancestors())
           Console.WriteLine(tag.Name);
   }

}

</source>


Query XML document with where clause

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Linq; using System.Reflection; using System.Xml.Linq; class Program {

   static void Main(string[] args) {
       XElement xml = XElement.Load(@"Employee.xml");
       var query = from p in xml.Elements("person")
                   where (int)p.Element("id") == 1
                   select p;
       foreach (var record in query) {
           Console.WriteLine("Employee: {0} {1}",
                                               record.Element("firstname"),
                                               record.Element("lastname"));
       }
   }

}

</source>


Query XML with Descendants

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Linq; using System.Reflection; using System.Xml.Linq; class Program {

   static void Main(string[] args) {
       XElement xml = XElement.Load("Employee.xml");
       var query = from p in xml.Descendants("person")
                   join s in xml.Descendants("id")
                   on (int)p.Element("id") equals (int)s.Attribute("id")
                   select new {
                       FirstName = p.Element("firstname").Value,
                       LastName = p.Element("lastname").Value,
                       Amount = s.Attribute("salaryyear").Value
                   };
       foreach (var record in query) {
           Console.WriteLine("Employee: {0} {1}, Salary {2}", record.FirstName,
                                                           record.LastName,
                                                           record.Amount);
       }
   }

}

</source>


Query XML with namespace

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Linq; using System.Reflection; using System.Xml.Linq; class Program {

   static void Main(string[] args) {
       XElement xml = XElement.Load("Hello.xml");
       XNamespace o = "urn:schemas-microsoft-com:office:office";
       var query = from w in xml.Descendants(o + "Author")
                   select w;
       foreach (var record in query)
           Console.WriteLine("Author: {0}", (string)record);
   }

}

</source>


Use Linq query to get XML document elements

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Linq; using System.Reflection; using System.Xml.Linq; class Program {

   static void Main(string[] args) {
       XElement xml = XElement.Load("Employee.xml");
       XElement html = new XElement("HTML",
                               new XElement("BODY",
                                   new XElement("TABLE",
                                       new XElement("TH", "ID"),
                                       new XElement("TH", "Full Name"),
                                       new XElement("TH", "Role"),
                                           from p in xml.Descendants("person")
                                           join r in xml.Descendants("role") on (int)p.Element("idrole") equals (int)r.Element("id")
                                           select new XElement("TR",
                                                           new XElement("TD", p.Element("id").Value),
                                                           new XElement("TD", p.Element("firstname").Value + " " + p.Element("lastname").Value),
                                                           new XElement("TD", r.Element("roledescription").Value)))));
       html.Save(@"C:\People.html");
   }

}

</source>


use Linq to query an XML document

<source lang="csharp"> using System; using System.Linq; using System.Xml; using System.Xml.Linq;

static class HelloLinqToXml {

   static void Main() {
       var books = new[] {
     new {Title="A", Publisher="M", Year=2005 },
     new {Title="W", Publisher="M", Year=2006 },
     new {Title="R", Publisher="M", Year=2006 }
   };
       XElement xml = new XElement("books",
         from book in books
         where book.Year == 2006
         select new XElement("book",
           new XAttribute("title", book.Title),
           new XElement("publisher", book.Publisher)
         )
       );
       Console.WriteLine(xml);
   }

}

</source>