public class XmlHelper
{
//从xml中获取MsgType
public static string XMLSelect(string XML)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(XML);
XmlNodeList Msgxnl = xmldoc.SelectNodes("xml/MsgType");
XmlNodeList Eventxnl = xmldoc.SelectNodes("xml/Event");
string MsgType = string.Empty;
string Event = string.Empty;
if (Msgxnl.Count != )//msgType不为空
{
MsgType = Msgxnl[].InnerText.Trim();
if (MsgType == "event")
{
if (Eventxnl.Count != )//event不为空
{
Event = Eventxnl[].InnerText.Trim();
if (Event == "unsubscribe" || Event == "subscribe" || Event == "LOCATION")
{
MsgType = Event;
}
else//eventKey存在
{
XmlNodeList xnlEventKey = xmldoc.SelectNodes("xml/EventKey");
if (xnlEventKey.Count != )
{
MsgType = xnlEventKey[].InnerText.Trim();
}
}
}
}
}
//else
//{
// XmlNode xn = xmldoc.SelectSingleNode("UpdateInfo/MsgType");
// if (xn!=null)
// {
// MsgType = xn.InnerText.Trim();
// }
//}
return MsgType;
}
//对象反序列化
public static T XmlDeserialize<T>(string xmlString)
{
T t = default(T);
using (MemoryStream stream = new MemoryStream())
{
using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8))
{
sw.Write(xmlString);
sw.Flush();
stream.Seek(, SeekOrigin.Begin);
XmlSerializer serializer = new XmlSerializer(typeof(T));
try
{
t = ((T)serializer.Deserialize(stream));
}
catch (Exception ex)
{
throw ex;
}
}
}
return t;
}
//自定义对象序列化成字符串
public static string CustomXMLSerialize<T>(T obj, string XML)
{
StringBuilder stringBuilder = new StringBuilder();
Type type = obj.GetType();//TextSendInfo
object[] classAtts = obj.GetType().GetCustomAttributes(typeof(XmlRootAttribute), false);//返回自定义特性的数组,XmlRootAttribute
if (classAtts.Length > )
{
string XmlRoot = ((XmlRootAttribute)classAtts[]).ElementName;//xml
stringBuilder.Append("<");
stringBuilder.Append(XmlRoot);
stringBuilder.Append(">"); PropertyInfo[] propertyArr = obj.GetType().GetProperties();//5个属性元素
if (propertyArr.Length > )
{
foreach (var propertyInfo in propertyArr)
{
object value = propertyInfo.GetValue(obj, null);//根据propertyInfo属性从obj中获取值,"请先在授权页面申请授权,再使用该功能!"
object[] propertyAtts = propertyInfo.GetCustomAttributes(typeof(XmlElementAttribute), false);//XmlElementAttribute
if (propertyAtts.Length > )
{
string xmlElementName = ((XmlElementAttribute)propertyAtts[]).ElementName;//content
stringBuilder.Append("<");
stringBuilder.Append(xmlElementName);
stringBuilder.Append(">");
if (xmlElementName == "CreateTime")
{
stringBuilder.Append(value);
}
else
{
stringBuilder.Append("<![CDATA[" + value + "]]>");
}
stringBuilder.Append("</");
stringBuilder.Append(xmlElementName);
stringBuilder.Append(">");
}
}
}
if (XML != string.Empty)
{
stringBuilder.Append(XML);
}
stringBuilder.Append("</");
stringBuilder.Append(XmlRoot);
stringBuilder.Append(">");
}
return stringBuilder.ToString();
}
}

XML文件的读取、序列化和反序列化操作的更多相关文章

  1. 基于.net core封装的xml序列化,反序列化操作

    需求: 由于在.net core中去除了Xml序列化XmlSerializer操作类.因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题.因此封装了一个xml序列化与反序列化操作的类库 ...

  2. python json序列化与反序列化操作

    python json序列化与反序列化操作 # dumps() dict-->str 序列化 # loads() str---dict 反序列化 result1 = json.dumps({'a ...

  3. java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)

    本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...

  4. spring 框架的xml文件如何读取properties文件数据

    spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...

  5. python之xml 文件的读取方法

    ''' xml 文件的读取方法 ''' #!/usr/bin/env python # -*- coding: utf- -*- import xml.etree.ElementTree as ET ...

  6. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  7. 用dom4j解析xml文件并执行增删改查操作

    转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...

  8. Java文件操作①——XML文件的读取

    一.邂逅XML 文件种类是丰富多彩的,XML作为众多文件类型的一种,经常被用于数据存储和传输.所以XML在现今应用程序中是非常流行的.本文主要讲Java解析和生成XML.用于不同平台.不同设备间的数据 ...

  9. JavaScript XML 兼容处理,序列化和反序列化以及回调事件

    浏览器中XML DOM的支持 IE中通过ActiveXObject实现了XML的支持,存在一下几个版本:Microsoft.XmlDom,MSXML2.DOMDocument,MSXML2.DOMDo ...

  10. javascript 实现 对XML文件 2级/3级联动操作

    js代码 //实现对xml文档的读取:function loadXMLDoc(dname) { try // Internet Explorer { xmlDoc = new ActiveXObjec ...

随机推荐

  1. css hack整理:区别FF,IE8,IE7,IE6,SF,CH浏览器

    css hack整理:区别FF,IE8,IE7,IE6,SF,CH浏览器 2013年03月24日 ⁄ CSS ⁄ 共 716字 ⁄ 暂无评论         前端开发最要命的事就是处理浏览器的兼容性问 ...

  2. js——倒计时

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Future 模式介绍

    假设一个任务执行需要花费一些时间,为了省去不必要的等待时间,可以先获取一个提货单,即future,然后继续处理别的任务,知道货物到达,即任务完成得到结果,此时可以使用提货单提货,即通过future得到 ...

  4. RHEL 5 安装phpqrcode生成二维码

    VMWARE中全新安装(默认)RHEL. 之后,yum 安装备apache/php 下载并上传phpqrcode 1.1.4版本,并将其解压至/var/www/html/phpqrcode (去掉ip ...

  5. Html11.09CSS层叠样式表内容整理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. HDU 3255 扫描线(立方体体积并变形)

    Farming Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  7. 一模 (6) day1

    第一题: 题目大意: 一个n的全排列A[i]是单峰的,当且仅当存在某个x使得A[1]<A[2]<...<A[x]>A[x+1]>...>A[n]. 试求 n 的单峰 ...

  8. nginx日志切割

    脚本完成后将其存入 Nginx 安装目录的 sbin 中,取名为 cut-log.sh,之后使用 crontab -e 新增一个定时任务,在其中增加执行这个脚本: #!/bin/bash ## 零点执 ...

  9. C# DES加密

    需要引用名称空间 using System; using System.Text; using System.Security.Cryptography; using System.IO; 具体代码: ...

  10. windows下svn自动更新

    配置hooks下post-commit.bat文件,文件内容如下 @echo offSET REPOS=%1SET REV=%2SET DIR=%REPOS%/hooksSET PATH=%PATH% ...