最近处理数据的时候用到了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. Django Web开发学习笔记(3)

    1.创建一个简单视图 这章是按照DgangoBook的说明.在我们创建的工程目录下面DjangoE_1(这是我为自己的工程命名的名字)新建一个view.py的文件,并在该文件下添加如下代码 from ...

  2. C#面试题(转载)

    原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. .NET和C#有什么区 ...

  3. Intro to Jedis – the Java Redis Client Library

    转自:http://www.baeldung.com/jedis-java-redis-client-library 1. Overview This article is an introducti ...

  4. latex学习(三)

    本文记录一点杂事. 1.vim下有个实时pdf预览的插件:https://github.com/xuhdev/vim-latex-live-preview 2.实时预览pdf的pdf查看器是:evin ...

  5. yarn 常用命令(基于vue框架)

    初始化项目 yarn add init 安装vue yarn add vue 安装webpack,webpack-dev-server(是一个小型的Node.js Express服务器) yarn a ...

  6. js 上一步 下一步 操作

    <a id="syb" href="#" style="display: block;" class="btn button ...

  7. AndroidStudio 代码(导入类)报错但可正常运行,以及解决此问题后带来的系列问题解决

    首先是应用中很多导入的类都报红色异常显示找不到此类,但运行编译正常: 第一种方法: 点击AndroidStudio菜单File -> Invalidate Caches/Restar… ,在弹出 ...

  8. java-信息安全(十七)-*.PFX(*.p12)&个人信息交换文件

    原文地址 http://snowolf.iteye.com/blog/735294 与计费系统打交道,少不了用到加密/解密实现.为了安全起见,通过非对称加密交换对称加密密钥更是不可或缺.那么需要通过什 ...

  9. 【Window 7】解决Win7远程桌面无法全屏的方法

    在Windows中有一项远程桌面功能,可以登录到其他电脑上进行远程控制,就像操纵本机一样,非常方便.但是最近发现用远程桌面登录过去时并不是全屏模式,而是窗口模式,老要拉滚动条,实在很不方便,今天还是到 ...

  10. Python中类的特殊变量

    特殊变量 类似__xx,以双下划线开头的实例变量名,就变成了一个私有变量(private),只有内部可以访问,外部不能访问: 类似__xx__,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变 ...