最近处理数据的时候用到了Xml和其他数据之间的转换,所以整理了一些方法。

class XMLHelper
{
/// <summary>
/// 读取xml模板
/// </summary>
/// <param name="filename">相对路径</param>
/// <returns></returns>
public static string Getmsg(string filename)
{
XmlDocument xmldoc = new XmlDocument();
string path = AppDomain.CurrentDomain.BaseDirectory;
string strUrl = path + filename;
xmldoc.Load(strUrl);
return xmldoc.InnerXml;
}
public static XmlDocument GetXmlDoc(string fielName)
{
XmlDocument xmldoc = new XmlDocument();
string path = AppDomain.CurrentDomain.BaseDirectory;
string strUrl = path + fielName;
xmldoc.Load(strUrl);
return xmldoc;
}
public static XmlDocument GetXmlDocument(string xml)
{
XmlDocument xmlDoc = new XmlDocument();
if (!string.IsNullOrEmpty(xml))
{
xmlDoc.LoadXml(xml);
}
return xmlDoc;
}
#region 序列化
/// <summary>
/// 序列化
/// </summary>
/// <param name="type">类型</param>
/// <param name="obj">对象</param>
/// <returns></returns>
public static string Serializer(Type type, object obj)
{
MemoryStream Stream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(type);
try
{
//序列化对象
xml.Serialize(Stream, obj);
}
catch (InvalidOperationException)
{
throw;
}
Stream.Position = 0;
StreamReader sr = new StreamReader(Stream);
string str = sr.ReadToEnd(); sr.Dispose();
Stream.Dispose(); return str;
} #endregion
//反序列化
//接收2个参数:xmlFilePath(需要反序列化的XML文件的绝对路径),type(反序列化XML为哪种对象类型)
public static object DeserializeFromXml(string xml, Type type)
{
object result = null;
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
MemoryStream ms = new MemoryStream();
xmlDoc.Save(ms);
ms.Seek(0, SeekOrigin.Begin);
XmlSerializer xs = new XmlSerializer(type);
result = xs.Deserialize(ms);
}
catch (Exception ex)
{
throw;
}
return result;
} /// <summary>
/// XML转换成DataTable
/// </summary>
/// <param name="xmlStr"></param>
/// <returns></returns>
public static DataTable XmlToDataTable(string xmlStr)
{
if (!string.IsNullOrEmpty(xmlStr))
{
StringReader StrStream = null;
XmlTextReader Xmlrdr = null;
try
{
DataSet ds = new DataSet();
//读取字符串中的信息
StrStream = new StringReader(xmlStr);
//获取StrStream中的数据
Xmlrdr = new XmlTextReader(StrStream);
//ds获取Xmlrdr中的数据
ds.ReadXml(Xmlrdr);
return ds.Tables[0];
}
catch (Exception ex)
{
throw;
}
finally
{
//释放资源
if (Xmlrdr != null)
{
Xmlrdr.Close();
StrStream.Close();
StrStream.Dispose();
}
}
}
return null;
}
/// <summary>
/// 格式化XML
/// </summary>
/// <param name="format">XML</param>
/// <param name="arg">传递DataRow可以直接格式化,也可以自己实现IFormatProvider</param>
/// <param name="formatProvider"></param>
/// <returns></returns>
public static string Format(string format, object arg)
{
char[] preChar = new char[] { '{' };
char[] endChar = new char[] { '}' };
DataRow row = arg as DataRow;
if (row != null)
{
var RegexStr = string.Format("{0}.+?{1}", string.Join("", preChar.ToArray()), string.Join("", endChar.ToArray()));
Regex reg = new Regex(RegexStr);
MatchCollection matchList = reg.Matches(format);
for (int i = 0; i < matchList.Count; i++)
{
string fieldName = matchList[i].ToString().TrimStart(preChar).TrimEnd(endChar);
string fieldVal = string.Empty;
if (row.Table.Columns.Contains(fieldName))
{
fieldVal = row[fieldName].ToString();
}
format = format.Replace(matchList[i].ToString(), fieldVal);
} } return format;
}
}

  

XmlHelpers的更多相关文章

  1. ionic 相关

     基本操作 $cordova platform update android@5.0.0 $ npm install -g cordova ionic $ ionic start myApp tabs ...

  2. ASP.NET MVC 5.0 参考源码索引

    http://www.projky.com/asp.netmvc/5.0/Microsoft/AspNet/Mvc/Facebook/FacebookAppSettingKeys.cs.htmlhtt ...

  3. ASP.NET MVC 4.0 参考源码索引

    http://www.projky.com/asp.netmvc/4.0/Microsoft/AspNet/Mvc/Facebook/FacebookAppSettingKeys.cs.htmlhtt ...

  4. 关于XML文档操作类

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

  5. ionic3构建过程中遇到的找不到AndroidManifest.xml的问题

    问题如下: Failed to install 'ionic-plugin-keyboard': Error: ENOENT: no such file or directory, open '/Us ...

随机推荐

  1. wamp设置实现本机IP或者局域网访问

    在 httpd.conf 中查找 Allow from 127.0.0.1 Order Deny,Allow Deny from all Allow from 127.0.0.1 在此下面加上 All ...

  2. 《Essential C++》读书笔记 之 基于对象编程风格

    <Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...

  3. 【iCore1S 双核心板_FPGA】例程四:TCL脚本实验——配置引脚

    代码包下载: 链接:http://pan.baidu.com/s/1o8G62im 密码:j0iq

  4. 【Unity笔记】打包安卓APK时Build Setting中的三种Build System

    Internal(Default):Unity内置,仅需Android SDK支持.不能导出工程,适用于仅适用Unity开发的工程. Gradle(New):使用Gradle进行构建,需要Androi ...

  5. React Native - FlexBox弹性盒模型

    FlexBox布局 1. 什么是FlexBox布局?   弹性盒模型(The Flexible Box Module),又叫FlexBox,意为"弹性布局",旨在通过弹性的方式来对 ...

  6. Java知多少(11)数据类型转换

    数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...

  7. Java知多少(93)鼠标事件

    鼠标事件的事件源往往与容器相关,当鼠标进入容器.离开容器,或者在容器中单击鼠标.拖动鼠标时都会发生鼠标事件.java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionL ...

  8. Image Lazy Load:那些延时加载图片的开源插件(jQuery)

    图片延时加载技术对大流量的网站来说是十分实用的.目前图片在网站中大量使用,如果不加处理的话会对服务器和带宽造成级大压力,通过只渲染当前用户可见区域的图片,可以极大地减少网站的请求数,降低网络带宽资源. ...

  9. Docker GitLab镜像部署

    环境说明 系统环境: CentOS Linux release 7.4 docker Version: 18.03.1-ce 运行镜像 docker run --detach \ --hostname ...

  10. shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断

    case判断 • 格式 case  变量名 in                       value1)                           command            ...