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 ...
随机推荐
- openssl - 数字证书的编程解析
原文链接: http://www.cangfengzhe.com/wangluoanquan/37.html 这篇文章主要介绍PKI公钥体系中非常核心元素——数字证书的编程解析.在SSL,SET等安全 ...
- R语言编程艺术#04#数据框(data.frame)
从直观上看,数据框类似矩阵
- Atitit 医学之道 attilax总结
Atitit 医学之道 attilax总结 1. 相关的学科3 1.1. 口腔医学 ok3 1.2. 人体解剖学 ok3 1.3. 生理学 ok3 1.4. 病理学 ok3 1.5. 骨伤科学 ...
- Android Studio Prettify 插件
1.功能:能够一键声明layout文件中的所有注明id的控件,节省时间 2.github地址 https://github.com/Haehnchen/idea-android-studio-plug ...
- c++对c的加强
1.register关键字的加强 register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度,这只是一种请求,编译器可以拒绝这种申请. ( ...
- 【emWin】例程二十二:窗口对象——Framewin
简介: 框架窗口为您的应用提供一个PC 应用程序的窗口外观.这些窗口由周围框架.标题栏和用户区组成. 触摸校准(上电可选择是否进入校准界面) 截图 实验指导书及代码包下载: 链接:http://pan ...
- Java编程的逻辑 (78) - 线程池
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- IP分片与重组详解
大家对IP数据包头,应该不陌生吧 分片便是与图中圈出来的两个地址有关,本文也是将主要围绕他们展开. 那我们先来了解他们的概念. 标志一个三比特字段遵循与用于控制或识别片段.他们是(按顺序,从高分以低位 ...
- C# 反射总结 获取 命名空间 类名 方法名
一.获取 命名空间 类名 方法名 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]
类的继承 Java只支持单继承,不允许多重继承- 一个子类只能有一个父类- 一个父类可以派生出多个子类这里写图片描述子类继承了父类,就继承了父类的方法和属性.在子类中,可以使用父类中定义的方法和属性, ...