XmlHelpers
最近处理数据的时候用到了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的更多相关文章
- ionic 相关
基本操作 $cordova platform update android@5.0.0 $ npm install -g cordova ionic $ ionic start myApp tabs ...
- ASP.NET MVC 5.0 参考源码索引
http://www.projky.com/asp.netmvc/5.0/Microsoft/AspNet/Mvc/Facebook/FacebookAppSettingKeys.cs.htmlhtt ...
- ASP.NET MVC 4.0 参考源码索引
http://www.projky.com/asp.netmvc/4.0/Microsoft/AspNet/Mvc/Facebook/FacebookAppSettingKeys.cs.htmlhtt ...
- 关于XML文档操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...
- ionic3构建过程中遇到的找不到AndroidManifest.xml的问题
问题如下: Failed to install 'ionic-plugin-keyboard': Error: ENOENT: no such file or directory, open '/Us ...
随机推荐
- file命令与magic file【转】
Linux基础——file命令与magic file [日期:2013-06-03] 来源:Linux社区 作者:sin90lzc [字体:大 中 小] //本文基于CentOS6.3 dist ...
- EasyUI tabs update 正确用法
来源:http://ewoyaofei.blog.163.com/blog/static/343562612012617111734974/ 一直以为 tabs update 是 easyui 的 b ...
- MySQL的reset slave与reset slave all
reset slave是各版本Mysql都有的功能,可以让slave忘记自己在master binary log中的复制位置. reset slave命令主要完成以下工作内容: -删除master.i ...
- [svc]二三层数据格式&&三层数据如何匹配路由
网络知识拾遗 tcpip的4&7层模型 PDU数据包在不同层的不同称呼 物理层(一层)PDU指数据位(Bit). 数据链路层(二层)PDU指数据帧(Frame). 网络层(三层)PDU指数据包 ...
- MYSQL 线程池
https://www.jianshu.com/p/88e606eca2a5 https://www.percona.com/doc/percona-server/LATEST/performance ...
- Zookeeper之Zookeeper底层客户端架构实现原理(转载)
Zookeeper的Client直接与用户打交道,是我们使用Zookeeper的interface.了解ZK Client的结构和工作原理有利于我们合理的使用ZK,并能在使用中更早的发现问题.本文将在 ...
- ASP.NET Core Razor Pages
Razor 页面是Asp.Net Core2.0新增的一个功能.Razor 页面是 ASP.NET Core MVC 的一个新特性,它可以使基于页面的编码方式更简单高效. 环境:vs2017 .net ...
- C++:重载全局new/delete实现跨平台多线程内存检测
Reference: https://blog.csdn.net/u014023615/article/details/39551191 Reference: https://blog.csdn.ne ...
- 如何进行 iPhone 客户端的软件测试
如何进行 iPhone 客户端的软件测试客户端版APP主要是通过苹果的APP Store来进行安装的.在测试时,开发会先在本地苹果机上打好包,然后我们在Xcode上进行安装或者直接在开发提供的网址上下 ...
- c++中局部变量初始化的问题
在C语言里,全局变量如果不初始化的话,默认为0,也就是说在全局空间里: int x =0; 跟 int x; 的效果看起来是一样的.但其实这里面的差别很大,强烈建议大家所有的全局变量都要初始化,他们的 ...