LINQ to XML示例

LINQ to XML格式:

<Message MID="@IDType="@TYPE">

  <Content From="@USERTime="@TIMESTAMP">@MSGCONTENT</Content>

</Message>

 

使用LINQ to XML,需要引入命名空间System.Xml.Linq

 

首先构造一个名为Message的类,这里使用了一些C#3.0的新特性:

public class Message

{

    public const int ID = 100000;

    public const string Type = "Message";

 

    // 3.0中属性的定义

    // From: 发送消息的用户名

    // Content: 所发消息的内容

    // Time: 消息发送的时间

 

    public string From { get;set; }

    public string Content get;set; }

    public string Time get;set; }

 

    // 重载 ToString()方法,格式化消息显示

    public override string ToString()

    {

        return string.Format("[{0}] {1}: {2}", Time, From, Content);

    }

 

    // 封装消息到XML格式字符串

    public string ToXMLString()

    {

        // 首先对消息进行Base64编码

        string content = Convert.ToBase64String(Encoding.UTF8.GetBytes(Content));

 

        // 封装到XML,下面就是 LINQ to XML 构造XML的方法

        XDocument xdoc = (new XDocument

            new XElement("Message",

                new XElement("Content", content,

                    new XAttribute("From", From),

                    new XAttribute("Time", Time)),

            new XAttribute("MID", ID),

            new XAttribute("Type", Type)));

 

        // 返回XML文本

        return xdoc.ToString();

    }

 

    // XML中解封消息并返回一个Message对象

    public static Message FromXMLString(string xml)

    {

        // 从字符串解析XML,就一句话

        XDocument xdoc = XDocument.Parse(xml);

 

        // 获得那个名为ContentElement

        XElement contentElem = xdoc.Element();"Message").Element("Content");

 

        // Object Initializer创建Message对象并返回

        return new Message

        {

            From = contentElem.Attribute("From").Value,

            Time = contentElem.Attribute("Time").Value,

            Content = Encoding.UTF8.GetString(Convert.FromBase64String(contentElem.Value))

        };

    }

}

 

再来写个写个小小的测试程序:

class Program

{

    static void Main(string[] args)

    {

        Message msg1 = new Message

        {

            From = "Siete",

            Time = DateTime.Now.ToLongTimeString(),

            Content = "Hello World!"

        };

 

        string xml = msg1.ToXMLString();

        Console.WriteLine(xml);

 

        Message msg2 = Message.FromXMLString(xml);

        Console.WriteLine(msg2);

        Console.Read();

    }

}

 

于是就可以看到我们想要的结果(没有XML的声明哦):

<Message MID="100000Type="Message">

  <Content From="SieteTime="12:00:00">SGVsbG8gV29ybGQh</Content>

</Message>XML示例

还有还有格式化的输出显示:
[12:00:00] Siete: Hello World!

获取XML节点属性的值,用Attribute

posted on 2012-11-12 17:34  快乐牛牛之家  阅读(115)  评论(0)    收藏  举报

导航