程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 二十行C#代碼打造Ruby Markup Builder

二十行C#代碼打造Ruby Markup Builder

編輯:C#入門知識

從.NET誕生之日起就有了XML類庫,但是從使用上來說非常不方便。例如我們需要構造一個XML文檔時,使用DOM API就要這樣搞:

var xmlDoc = new XmlDocument();
var rootEle = xmlDoc.CreateElement("persons");
xmlDoc.AppendChild(rootEle);

var person1 = xmlDoc.CreateElement("person");
person1.InnerText = "Tom";
var person1Age = xmlDoc.CreateAttribute("age");
person1Age.Value = "10";
person1.Attributes.Append(person1Age);
rootEle.AppendChild(person1);

var person2 = xmlDoc.CreateElement("person");
person2.InnerText = "Jerry";
var person2Age = xmlDoc.CreateAttribute("age");
person2Age.Value = "8";
person2.Attributes.Append(person2Age);
rootEle.AppendChild(person2);

別看這麼多行代碼,但實際上它只構造了這麼簡單的一個XML:

<persons>
  <person age="10">Tom</person>
  <person age="8">Jerry</person>
</persons>

我承認,DOM API的確非常嚴謹(如XmlDocument和XmlElement的歸屬關系),非常符合定義,也非常的面向對象,但是這易用性也實在太差了。記得在03還是04年的時候,我為在為項目做一個編輯XML文檔的WinForm應用程序,當時也不像現在那麼容易想到“偷懶”的法門,而VS 2003也不像VS 2005/2008那麼好用,因此可謂做的勞心費神。這個情況在.NET 2.0中也沒有得到改變,直到有一天,LINQ to XML隨.NET 3.5橫空出世,於是乎XML的生活一下子變得美好了很多。例如上面的功能只需寥寥數行便可以實現:

var xmlDoc = new XElement("persons",
    new XElement("person",
        "Tom",
        new XAttribute("age", 10)),
    new XElement("person",
        "Jerry",
        new XAttribute("age", 8))); 

雖然LINQ to XML一直是所謂C# 3.0中LINQ特性的一部分,與LINQ to SQL,LINQ to Object及LINQ to……某個別的並列,但我始終認為LINQ to XML實則還是LINQ to Object的一種特殊形式,只是它用於操作XML而已。它的一切都是System.Xml.Linq命名空間下相關類庫(如XElement)在起作用,不關LINQ什麼事情。XElement等相關類型大大簡化了我們的開發,與DOM API相比,無論是XML的構造還是讀取都容易了許多。不過俗話說得好:“不怕不識貨,就怕貨比貨”,這樣的API與Ruby Markup Builder相比還是有明顯差距。請看:

builder = Builder::XmlMarkup.new
xml = builder.persons { |b|
    b.person("Tom", :age => "10")
    b.person("Jerry", :age => "8")
}

請看上面這段代碼,它自然沒有使用Ruby語言的標准著色方式。我著色的目的是體

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved