XML文件数据操作
#region XML序列化文件和反序列化 /// <summary>
/// 通用类的保存函数,可以将已经声明过可序列化的类以文件方式保存起来。
/// 保存格式分为 XML明文式和 二进制。
/// 如果目标目录不存在,就自动创建目录。
/// </summary>
/// <typeparam name="T">要保存的类的类型</typeparam>
/// <param name="tclass">要保存的类</param>
/// <param name="sFilePath">要保存的文件完整路径,包括文件名。</param>
/// <param name="bXmlOrBin">true=XML,false=Bin</param>
/// <exception cref="System.Exception"></exception>
public void Save<T>(T tclass, string sFilePath, bool bXmlOrBin)
{
//目录检查
string sFolder = sFilePath.Substring(, sFilePath.LastIndexOf("\\"));
if (!Directory.Exists(sFolder)) Directory.CreateDirectory(sFolder); using (FileStream fs = new FileStream(sFilePath, FileMode.Create, FileAccess.Write))
{
if (bXmlOrBin)
{
using (MemoryStream stream = Serialize<T>(tclass, bXmlOrBin))
{
stream.WriteTo(fs);
stream.Close();
}
}
else
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = null;
bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(fs, bXmlOrBin);
}
fs.Close();
}
} /// <summary>
/// 从文件加载保存的信息,然后反序列化并返回保存的信息。
/// 如果要读取的文件不存在会引发异常。
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="tclass">要返回的类,失败返回默认</param>
/// <param name="sFilePath">文件路径</param>
/// <param name="bXmlOrBin">true=XML,false=Bin</param>
/// <exception cref="System.Exception"></exception>
/// <exception cref="System.IO.IOException">文件不存在</exception>
public void Load<T>(out T tclass, string sFilePath, bool bXmlOrBin)
{
if (!File.Exists(sFilePath))
{
tclass = default(T);
return;
//throw new IOException("要访问的文件不存在。");
}
using (FileStream fs = new FileStream(sFilePath, FileMode.Open, FileAccess.Read))
{
tclass = Deserialize<T>(fs, bXmlOrBin);
fs.Close();
}
} /// <summary>
/// 将传入的某个模型序列化,并返回其数据量,用于保存到文件里面。
/// 提供序列化到XML或二进制。
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="model">要序列化的模型</param>
/// <param name="bXmlOrBin">true=xml序列化,false=二进制序列化</param>
/// <returns></returns>
/// <exception cref="System.Exception"></exception>
public MemoryStream Serialize<T>(T model, bool bXmlOrBin = true)
{
MemoryStream stream = new MemoryStream();
if (bXmlOrBin)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stream, model);
}
else
{
var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(stream, model);
}
stream.Position = ;
return stream;
} /// <summary>
/// 将传入的数据量进行反序列化。
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="stream">要反序列化的流</param>
/// <param name="bXmlOrBin">true=xml序列化,false=二进制序列化</param>
/// <returns></returns>
public T Deserialize<T>(Stream stream, bool bXmlOrBin = true)
{
T model = default(T);
using (var newstream = stream)
{
if (bXmlOrBin)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
//暂时没做什么处理,以后有日志文件,就直接添加进入
serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode);
serializer.UnknownAttribute += new XmlAttributeEventHandler(serializer_UnknownAttribute);
model = (T)serializer.Deserialize(newstream);
}
else
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = null;
bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
model = (T)bf.Deserialize(newstream);
}
}
return model;
} #region 反序列化中出错的问题
private void serializer_UnknownNode(object sender, XmlNodeEventArgs e)
{
string aaaa = "Unknown Node:" + e.Name + "\t" + e.Text;
string bb = string.Empty;
//Console.WriteLine("Unknown Node:" + e.Name + "\t" + e.Text);
} private void serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e)
{
//System.Xml.XmlAttribute attr = e.Attr;
//Console.WriteLine("Unknown attribute " +
//attr.Name + "='" + attr.Value + "'");
System.Xml.XmlAttribute attr = e.Attr;
string aaaa = "Unknown attribute " + attr.Name + "='" + attr.Value + "'";
string bb = string.Empty;
}
#endregion #endregion
XML解析序列化2
/// <summary>
/// 实体转Xml,Xml转实体类
/// </summary>
/// <typeparam name="T"></typeparam>
public class XmlHelper<T> where T : new()
{
#region 实体类转成Xml
/// <summary>
/// 对象实例转成xml
/// </summary>
/// <param name="item">对象实例</param>
/// <returns></returns>
public static string EntityToXml(T item)
{
IList<T> items = new List<T>();
items.Add(item);
return EntityToXml(items);
} /// <summary>
/// 对象实例集转成xml
/// </summary>
/// <param name="items">对象实例集</param>
/// <returns></returns>
public static string EntityToXml(IList<T> items)
{
//创建XmlDocument文档
XmlDocument doc = new XmlDocument();
//创建根元素
XmlElement root = doc.CreateElement("s");//typeof(T).Name +
//添加根元素的子元素集
foreach (T item in items)
{
EntityToXml(doc, root, item);
}
//向XmlDocument文档添加根元素
doc.AppendChild(root); return doc.InnerXml;
} private static void EntityToXml(XmlDocument doc, XmlElement root, T item)
{
//创建元素
XmlElement xmlItem = doc.CreateElement("t");//typeof(T).Name
//对象的属性集 System.Reflection.PropertyInfo[] propertyInfo =
typeof(T).GetProperties(System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance); foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
{
if (pinfo != null)
{
//对象属性名称
string name = pinfo.Name;
//对象属性值
string value = String.Empty; if (pinfo.GetValue(item, null) != null)
value = pinfo.GetValue(item, null).ToString();//获取对象属性值
//设置元素的属性值
xmlItem.SetAttribute(name, value);
}
}
//向根添加子元素
root.AppendChild(xmlItem);
} #endregion #region Xml转成实体类 /// <summary>
/// Xml转成对象实例
/// </summary>
/// <param name="xml">xml</param>
/// <returns></returns>
public static T XmlToEntity(string xml)
{
IList<T> items = XmlToEntityList(xml);
if (items != null && items.Count > )
return items[];
else return default(T);
} /// <summary>
/// Xml转成对象实例集
/// </summary>
/// <param name="xml">xml</param>
/// <returns></returns>
public static IList<T> XmlToEntityList(string xml)
{
XmlDocument doc = new XmlDocument();
try
{
doc.Load(xml);//LoadXML
}
catch (Exception ex)
{
throw ex;
}
if (doc.ChildNodes.Count <= )
return null;
//if (doc.ChildNodes[0].Name.ToLower() != typeof(T).Name.ToLower() + "s")
// return null; XmlNode node = doc.ChildNodes[]; IList<T> items = new List<T>(); foreach (XmlNode child in node.ChildNodes)
{
if (child.Name.ToLower() == typeof(T).Name.ToLower())
items.Add(XmlNodeToEntity(child));
} return items;
} private static T XmlNodeToEntity(XmlNode node)
{
T item = new T(); if (node.NodeType == XmlNodeType.Element)
{
//XmlElement element = (XmlElement)node; System.Reflection.PropertyInfo[] propertyInfo =
typeof(T).GetProperties(System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance); foreach (XmlNode attr in node.ChildNodes)//XmlAttribute
{
string attrName = attr.Name.ToLower();
string attrValue = attr.InnerXml.ToString();
foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
{
if (pinfo != null)
{
string name = pinfo.Name.ToLower();
Type dbType = pinfo.PropertyType;
if (name == attrName)
{
if (String.IsNullOrEmpty(attrValue))
continue;
switch (dbType.ToString())
{
case "System.Int32":
pinfo.SetValue(item, Convert.ToInt32(attrValue), null);
break;
case "System.Boolean":
pinfo.SetValue(item, Convert.ToBoolean(attrValue), null);
break;
case "System.DateTime":
pinfo.SetValue(item, Convert.ToDateTime(attrValue), null);
break;
case "System.Decimal":
pinfo.SetValue(item, Convert.ToDecimal(attrValue), null);
break;
case "System.Double":
pinfo.SetValue(item, Convert.ToDouble(attrValue), null);
break;
default:
pinfo.SetValue(item, attrValue, null);
break;
}
continue;
}
}
}
}
}
return item;
} #endregion
} //IList<ds> listDS = new List<MainWeb.ds>();
//listDS = XmlHelper<ds>.XmlToEntityList("D:\\DownLoad\\数据\\2017-03.xml");
/// <summary>
/// 根据节点读取xml指定节点内容
/// </summary>
/// <param name="spath">路径</param>
/// <param name="nodeName">节点名字</param>
/// <returns></returns>
public static string getXMLNodeText(string spath, string nodeName)
{
try
{
string uri = System.Web.HttpContext.Current.Server.MapPath("~/" + spath);
XmlDocument doc = new XmlDocument();
doc.Load(uri);
XmlElement eml = doc.SelectSingleNode("/" + nodeName) as XmlElement;
string result = eml.InnerText;
return result;
}
catch
{
return "";
}
} string strNode = getXMLNodeText("Web层文件路径", "documentXML/ParentNode/ChildNode");
根据IP获取城市--有道接口
string Uri = "http://www.yodao.com/smartresult-xml/search.s?type=ip&q=" + IP; //获取省份名称
string CtryDisc = MyRegex.HttpWeb.getHtmlByUri(Uri, Encoding.GetEncoding("GB2312"));
using (XmlReader read = XmlReader.Create(CtryDisc))//获取返回的xml格式文件内容
{
while (read.Read())
{
switch (read.NodeType)
{
case XmlNodeType.Text://取xml格式文件当中的文本内容
if (string.Format("{0}", read.Value).ToString().Trim() != IP)//youdao返回的xml格式文件内容一个是IP,另一个是IP地址
{
CtryDisc = string.Format("{0}", read.Value).ToString().Trim();//赋值
}
break;
//other
}
}
}
config.xml
#region XML控制
public XmlDocument xml = null;
public string xmlpath = string.Empty;
/// <summary>
/// 以XML格式进行存储
/// </summary>
public bool Save(string id, string data, string nodes, string key, string value, bool isMsg)
{
if (!IsXml(isMsg)) return false;
foreach (XmlNode xl in xml.SelectNodes(nodes))
{
if (xl.Attributes[key].Value == id)
{
xl.Attributes[value].Value = data;
break;
}
}
xml.Save(xmlpath);
return true;
} /// <summary>
/// 获取数据
/// </summary>
public string GetData(string id, string nodes, string key, string value, bool isMsg)
{
if (!IsXml(isMsg)) return "";
foreach (XmlNode xl in xml.SelectNodes(nodes))
{
if (xl.Attributes[key].Value == id)
return xl.Attributes[value].Value;
}
return "";
} /// <summary>
/// 判断XML文件是否存在
/// </summary>
/// <returns></returns>
public bool IsXml(bool isMsg)
{
FileInfo file = new FileInfo(xmlpath);
if (!file.Exists)
{
if (isMsg)
MessageBox.Show(string.Format("无法找到数据配置文件:{0}\n请联系管理员!", file.Name));
return false;
}
file.IsReadOnly = false;
xml = new XmlDocument();
xml.Load(xmlpath);
return true;
}
#endregion xmlpath = string.Format(@"{0}config.xml", AppDomain.CurrentDomain.BaseDirectory);
if (!File.Exists(xmlpath))
{
MessageBox.Show("找不到config.xml配置文件请联系管理员!");
return;
} /*
string _appStrPath = "/configuration/appSettings/add";
string _depart = GetData("depart", _appStrPath, "key", "value", false);
*/
/// <summary> /// 实体转Xml,Xml转实体类 /// </summary> /// <typeparam name="T"></typeparam> public class XmlHelper<T> where T : new() { #region 实体类转成Xml /// <summary> /// 对象实例转成xml /// </summary> /// <param name="item">对象实例</param> /// <returns></returns> public static string EntityToXml(T item) { IList<T> items = new List<T>(); items.Add(item); return EntityToXml(items); }
/// <summary> /// 对象实例集转成xml /// </summary> /// <param name="items">对象实例集</param> /// <returns></returns> public static string EntityToXml(IList<T> items) { //创建XmlDocument文档 XmlDocument doc = new XmlDocument(); //创建根元素 XmlElement root = doc.CreateElement("s");//typeof(T).Name + //添加根元素的子元素集 foreach (T item in items) { EntityToXml(doc, root, item); } //向XmlDocument文档添加根元素 doc.AppendChild(root);
return doc.InnerXml; }
private static void EntityToXml(XmlDocument doc, XmlElement root, T item) { //创建元素 XmlElement xmlItem = doc.CreateElement("t");//typeof(T).Name //对象的属性集
System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
foreach (System.Reflection.PropertyInfo pinfo in propertyInfo) { if (pinfo != null) { //对象属性名称 string name = pinfo.Name; //对象属性值 string value = String.Empty;
if (pinfo.GetValue(item, null) != null) value = pinfo.GetValue(item, null).ToString();//获取对象属性值 //设置元素的属性值 xmlItem.SetAttribute(name, value); } } //向根添加子元素 root.AppendChild(xmlItem); }
#endregion
#region Xml转成实体类
/// <summary> /// Xml转成对象实例 /// </summary> /// <param name="xml">xml</param> /// <returns></returns> public static T XmlToEntity(string xml) { IList<T> items = XmlToEntityList(xml); if (items != null && items.Count > 0) return items[0]; else return default(T); }
/// <summary> /// Xml转成对象实例集 /// </summary> /// <param name="xml">xml</param> /// <returns></returns> public static IList<T> XmlToEntityList(string xml) { XmlDocument doc = new XmlDocument(); try { doc.Load(xml);//LoadXML } catch (Exception ex) { throw ex; } if (doc.ChildNodes.Count <= 1) return null; //if (doc.ChildNodes[0].Name.ToLower() != typeof(T).Name.ToLower() + "s") // return null;
XmlNode node = doc.ChildNodes[1];
IList<T> items = new List<T>();
foreach (XmlNode child in node.ChildNodes) { if (child.Name.ToLower() == typeof(T).Name.ToLower()) items.Add(XmlNodeToEntity(child)); }
return items; }
private static T XmlNodeToEntity(XmlNode node) { T item = new T();
if (node.NodeType == XmlNodeType.Element) { //XmlElement element = (XmlElement)node;
System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
foreach (XmlNode attr in node.ChildNodes)//XmlAttribute { string attrName = attr.Name.ToLower(); string attrValue = attr.InnerXml.ToString(); foreach (System.Reflection.PropertyInfo pinfo in propertyInfo) { if (pinfo != null) { string name = pinfo.Name.ToLower(); Type dbType = pinfo.PropertyType; if (name == attrName) { if (String.IsNullOrEmpty(attrValue)) continue; switch (dbType.ToString()) { case "System.Int32": pinfo.SetValue(item, Convert.ToInt32(attrValue), null); break; case "System.Boolean": pinfo.SetValue(item, Convert.ToBoolean(attrValue), null); break; case "System.DateTime": pinfo.SetValue(item, Convert.ToDateTime(attrValue), null); break; case "System.Decimal": pinfo.SetValue(item, Convert.ToDecimal(attrValue), null); break; case "System.Double": pinfo.SetValue(item, Convert.ToDouble(attrValue), null); break; default: pinfo.SetValue(item, attrValue, null); break; } continue; } } } } } return item; }
#endregion }
XML文件数据操作的更多相关文章
- 实现动态的XML文件读写操作
实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...
- Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互。
在上一篇文章中我们成功得到了重新组织后的数据,接下来需要做的便是将数据插入到数据库中了.在与数据库打交道的过程中有一些方法是普遍的,我们将这些通用方法封装到一个DbUtil类中,以便复用,封装好的Db ...
- 实现动态的XML文件读写操作(依然带干货)
前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义好XML文件的格式就不太现实了,如何实现不管 ...
- 更新java对xml文件的操作
//更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...
- Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
Ajax实现将xml文件数据插入数据库的过程所涉及到的内容比较多,所以对于该过程的讲解本人打算根据交互的过程将其分为三个部分,第一部分为构建解析xml文件的javascript库,第二部分为ajax与 ...
- 编写Java程序,使用 dom4j 解析上一节王者荣耀“英雄”对应的Xml文件数据内容,打印输出,具体格式
查看本章节 查看作业目录 需求说明: 使用 dom4j 解析上一节王者荣耀"英雄"对应的Xml文件数据内容,打印输出,具体格式如图所示 实现思路: 创建ParseHeroXML用于 ...
- Java 创建xml文件和操作xml数据
java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...
- Adobe AIR对本地文件(XML文件)的操作
引用:http://addiwang.blog.163.com/blog/static/118130772011221114230288/ Air的文件操做主要涉及两个类,FIle和FileStrea ...
- python - XML文件及其操作
xml文件也是实现不同语言或者程序之间进行数据交换的协议,它的特点是尖括号开头,尖括号结尾.使用范围就更为广泛了,tomcat resin kvm 等等,使用了大量的xml文件来进行相关配置.先来看一 ...
随机推荐
- XML学习笔记
XML学习笔记 第一部分:XML简介 我们经常可以听到XML.HTML.XHTML这些语言,后两者比较清楚,一直不是很明白XML是什么,这里做一个总结. XML(eXtensible Markup L ...
- SSH(Struts Spring Hibernate开发框架)
Spring(Model) Spring的核心思想是IoC和AOP,Spring使得管理对象更加方便,极大的降低组件之间的耦合度,实现了软件各层之间的解耦. Struts(View) 使用Struts ...
- jquery 获取 json文件内容后,将其内容显示到 下拉列表框中,再将下拉列表中的内容,显示到文本框中
<script type="text/javascript"> $(function(){ $("#huoqv").click(function() ...
- jpa datasource config
application.properties spring.datasource.driverClassName= spring.datasource.url= spring.datasource.u ...
- maven学习讲解
参考链接:http://www.cnblogs.com/bigtall/archive/2011/03/23/1993253.html 1.前言 Maven,发音是[`meivin],"专家 ...
- wamp环境PHP安装mongodb扩展
特别注意 :本地的下载的mongo 为线性TS *86 而不是64 按照apache的版本来定.
- HTML 个人资料框
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Spot光照资料
http://forums.autodesk.com/t5/FBX-SDK/EmissiveFactor-AmbientFactor-DiffuseFactor/td-p/4230572http:// ...
- ecshop团购显示“库存不足”
产生原因:是因为产品设置了多属性 解决办法:打开group_buy.php 第 267行找到 empty($product_info) ? $product_info = array(, ) : '' ...
- Fork函数初识
fork函数用于创建子进程,典型的调用一次,返回两次的函数.其中调用进程返回子进程的PID,而子进程则返回0.但是两个进程的执行顺序是不定的. fork函数调用完成以后父进程的虚拟存储空间被拷贝给了子 ...