LINQ to XML provides a more convenient way to read and write xml. In the comments of previous articles, friends always mentioned, why don’t you use linq to xml? Now it's time, linq to xml appears.
The System.Xml.Linq namespace in .Net provides support for linq to xml. XDocument, XElement, XText, and XAttribute in this namespace provide key methods for reading and writing xml documents.
1. Use linq to xml to write xml:
Use the constructor of XDocument to construct an Xml document object; use the XElement object to construct an xml node element, use The XAttribute constructor can construct the attributes of the element; use the XText constructor to construct the text within the node.
The following example code:
class Program { static void Main(string[] args) { var xDoc = new XDocument(new XElement( "root", new XElement("dog", new XText("dog said black is a beautify color"), new XAttribute("color", "black")), new XElement("cat"), new XElement("pig", "pig is great"))); //xDoc输出xml的encoding是系统默认编码,对于简体中文操作系统是gb2312 //默认是缩进格式化的xml,而无须格式化设置 xDoc.Save(Console.Out); Console.Read(); } }
The above code will output the following Xml:
<?xml version="1.0" encoding="gb2312"?> <root> <dog color="black">dog said black is a beautify color</dog> <cat /> <pig>pig is great</pig> </root>
It can be seen that linq to xml is much more convenient than XmlDocument and XmlWriter.
2. Use linq to xml to read xml
Linq is from the collection The query object, the collection in linq to xml is obtained through XElement's Elements(), Elements(string name), and several overloaded methods of Descendants, DescendantsAndSelf, Ancestors, and AncestorsAndSelf.
After obtaining the XElement collection, you can obtain the attribute value of the element through the Attribute (string name) method of XElement, and obtain the text value of the node through the Value attribute of XElement; you can use linq to easily query and filter. Sorting
is still the xml in the above example. We need to read all the byte points of the root and print them out, as follows:
class Program { static void Main(string[] args) { var xDoc = new XDocument(new XElement( "root", new XElement("dog", new XText("dog said black is a beautify color"), new XAttribute("color", "black")), new XElement("cat"), new XElement("pig", "pig is great"))); //xDoc输出xml的encoding是系统默认编码,对于简体中文操作系统是gb2312 //默认是缩进格式化的xml,而无须格式化设置 xDoc.Save(Console.Out); Console.WriteLine(); var query = from item in xDoc.Element( "root").Elements() select new { TypeName = item.Name, Saying = item.Value, Color = item.Attribute("color") == null?(string)null:item.Attribute("color").Value }; foreach (var item in query) { Console.WriteLine("{0} 's color is {1},{0} said {2}",item.TypeName,item.Color??"Unknown",item.Saying??"nothing"); } Console.Read(); } }
3. Linq to xml simple application
Application requirements: Read the RSS of the blog park, and then output the latest 10 articles on the page Blog information
Implementation points: Load Xml through the Load static method of XDocument, and query the latest 10 pieces of data through linq
The code is as follows:
<%@ Page Language="C#" AutoEventWireup="true" %> <script runat="server"> protected override void OnLoad(EventArgs e) { //实际应用,通过读取博客园的RSS生成Html代码显示最新的博客列表 //使用XDocument的Load静态方法载入Xml //玉开技术博客 //m.sbmmt.com/ var rssXDoc = XDocument.Load("http://www.cnblogs.com/rss"); //使用linq to xml查询前10条新博客 var queryBlogs = (from blog in rssXDoc.Descendants("item") select new { Title = blog.Element("title").Value, Url = blog.Element("link").Value, PostTime = DateTime.Parse(blog.Element("pubDate").Value) }).Take(20); repeaterBlogs.DataSource = queryBlogs; repeaterBlogs.DataBind(); base.OnLoad(e); } </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Linq to Xml 实例</title> </head> <body> <ol> <asp:Repeater ID="repeaterBlogs" EnableViewState="false" runat="server"> <ItemTemplate> <li><span style="float: right"> <%#Eval("PostTime") %></span><a href="<%#Eval("Url") %>"><%#Eval("Title") %></a></li> </ItemTemplate> </asp:Repeater> </ol> </body> </html>
The development of C# makes reading and writing Xml easier and easier.
C# Related essays on processing Xml:
1. Read and write Xml documents through XmlDocument
2. Use XmlReader to read Xml and use XmlWriter to write Xml
3. Use Linq to xml to access XML
4. Define fixed format xml documents through XmlScheme
5.Xml serialization or deserialization class
6.Through XPath Find Xml nodes
7. Convert Xml format through