LINQ to XML示例
LINQ to 下XML格式:<Message MID="@ID" Type="@TYPE">
<Content From="@USER" Time="@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);
// 获得那个名为Content的Element
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="100000" Type="Message">
<Content From="Siete" Time="12:00:00">SGVsbG8gV29ybGQh</Content>
</Message>XML示例
<Message MID="@ID" Type="@TYPE">
<Content From="@USER" Time="@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);
// 获得那个名为Content的Element
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="100000" Type="Message">
<Content From="Siete" Time="12:00:00">SGVsbG8gV29ybGQh</Content>
还有还有格式化的输出显示:
[12:00:00] Siete: Hello World!
获取XML节点属性的值,用Attribute
浙公网安备 33010602011771号