LINQ to XML は、XML の読み書きを行うためのより便利な方法を提供します。以前の記事のコメントで、友人たちはいつも「linq to xml を使ってみてはどうですか?」と言ってました。さあ、linq to xml が登場します。
.Net の System.Xml.Linq 名前空間は、linq to xml のサポートを提供します。この名前空間の XDocument、XElement、XText、および XAttribute は、XML ドキュメントの読み取りと書き込みのための主要なメソッドを提供します。
1. linq to xml を使用して XML を作成します。
XDocument コンストラクターを使用して XML ドキュメント オブジェクトを構築し、XElement オブジェクトを使用して要素の属性を構築します。 XText 構造体 関数はノード内にテキストを構築できます。
次のコード例:
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(); } }
上記のコードは、次の 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>
linq to xml は、XmlDocument や XmlWriter よりもはるかに便利であることがわかります。
2. linq to xml を使用して xml を読み取ります
Linq は、XElement の Elements()、Elements(string name)、およびコレクションからオブジェクトをクエリします。 Descendants、DescendantsAndSelf、Ancestors、AncestorsAndSelf のいくつかのオーバーロードされたメソッドから取得されます。
XElement コレクションを取得した後、XElement の Attribute(string name) メソッドを通じて要素の属性値を取得でき、上記の例では xml を引き続き使用して、ノードのテキスト値を Value 属性を通じて取得できます。次のコードに示すように、root のすべてのバイト ポイントを読み取って出力する必要があります:
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(); } }
アプリケーション要件: RSS を読み取ります。ブログパークにアクセスし、最新10件のブログ情報をページ上に出力します
実装ポイント:XDocumentのLoad静的メソッドでXmlを読み込み、linqで最新10件のデータをクエリ
コードは以下の通りです
<%@ Page Language="C#" AutoEventWireup="true" %> <script runat="server"> protected override void OnLoad(EventArgs e) { //实际应用,通过读取博客园的RSS生成Html代码显示最新的博客列表 //使用XDocument的Load静态方法载入Xml //玉开技术博客 http://www.php.cn/ 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>
C# の開発により、Xml の読み書きがますます簡単になります。
Xml 処理に関する C# の関連エッセイ:
1. 固定形式の XML ドキュメントを介して XML ドキュメントを読み書きする
5. PHP の中国語 Web サイトにご注意ください。