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解决方案经验杂记

    文本垂直居中 单行文本:line-height的值等于height: 多行文本:padding上下值一致即可: 还可以使用position:absolute进行绝对定位,如果是相对父级元素,则需要设置 ...

  2. FG函数模块

    ALDB:                             ABAP/4上的逻辑数据库                                   选择屏幕的修改更新 BUBA_4: ...

  3. OUT函数及其熟练使用,split的用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. <<薪资至少10K的一道题,你能拿下吗>>练习

    偶尔要写写算法,是我平时用来保持感觉的常用的方法.今天看到园子里一面试题,看了一下感觉也能实现,不过过程确实艰的,自认为自己对算法的感觉还不错.不过这题确实我也用了差不多一下午的时间,基本上把工作时间 ...

  5. echart饼状图的学习

    一.引入js文件 <!--Step:1 引入一个模块加载器,如esl.js或者require.js--> <script src="~/Scripts/esl.js&quo ...

  6. c# xml的增删改查操作 xmlDocument 的用法

    1.将xml转换为DataTable string path = "";//xml的位置StringReader sr = null;XmlTextReader xmlReader ...

  7. Java多线程-新特征-锁(上)

    在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口 ...

  8. JS模块式开发

    问题:js文件须严格保证加载顺序(比如上例的1.js要在2.js的前面),依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难! C语言中模块开发-include ...

  9. Octopus系列之如何让前台的js脚本变得灵活重用

    Octopus系列如何让前台的js脚本变得灵活,重用 方式1:ajax方式 方式2:form表单方式 面向对象的脚本封装 jQuery的封装 做Web开发的少不了前台Ajax的使用, 返回true:f ...

  10. 互斥锁pthread_mutex_t的使用(转载)

    1. 互斥锁创建        有两种方法创建互斥锁,静态方式和动态方式.POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mut ...