你所在位置:首页C#.net开发 → 二十行C#代码打造Ruby Markup Builder

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

发布时间:2019-03-15

从.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 { 
上一篇:C#开发终端式短信的原理和方法
下一篇:ImageAnimator类方法(动画设计)