• C#生成、解析xml文件以及处理报错原因


       转载自:http://blog.csdn.net/lilinoscar/article/details/21027319

    简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数据库 用xml还是比较好些。如果遇到问题也就是解析时报错,对于解析,可以选择用ie浏览器进行验证 是否符合xml格式,不能显示说明不正确,用记事本打开看也没有发现啥情况,复制出来到别的xml 文件里,运行可能正确,那就说明生成的xml编码有问题。还有就是节点有什么空格啥的。 Load和LoadXml方法的区别? Load方法可以解析包括xml的头部文件“<?xml version="1.0" encoding="utf-8"?>”,而LoadXml 方法不能解析,会报错,它只能解析如:<Resources><Guid>647e7d54-321c-4bca-ac10-301de2837d9d </Guid><Name>中国案件4</Name></Resources>文件,不能包含xml的头部文件。 1.序列化类: /// <summary> /// 序列化成XML /// </summary> /// <param name="o"></param> /// <returns></returns> public static string XmlSerialize(object o) { XmlSerializer ser = new XmlSerializer(o.GetType()); System.IO.MemoryStream mem = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ser.Serialize(writer, o, ns); writer.Close(); return Encoding.UTF8.GetString(mem.ToArray()); } /// <summary> /// 解析成XML /// </summary> /// <typeparam name="T"></typeparam> /// <param name="s"></param> /// <returns></returns> public static T XmlDeserialize<T>(string s) { XmlDocument xdoc = new XmlDocument(); try { xdoc.Load(s); XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement); XmlSerializer ser = new XmlSerializer(typeof(T)); object obj = ser.Deserialize(reader); return (T)obj; } catch { return default(T); } } /// <summary> /// 解析成XML,不能解析包含头部文件<?xml version="1.0" encoding="utf-8"?> /// </summary> /// <typeparam name="T"></typeparam> /// <param name="s"></param> /// <returns></returns> public static T LoadXmlDeserialize<T>(string s) { XmlDocument xdoc = new XmlDocument(); try { xdoc.LoadXml(s); XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement); XmlSerializer ser = new XmlSerializer(typeof(T)); object obj = ser.Deserialize(reader); return (T)obj; } catch { return default(T); } } 2.//Resources类 public class Resources { public Guid Guid { get; set; } public string Name { get; set; } } 3.//生成xml public void CreateXml(List<Resources> _list, string path) { var xml = SerializerHelper.XmlSerialize(_list).Trim();//这个地方也需要去除空格,不然也会报错,错误跟下面的一样。 // using (StreamWriter sw = new StreamWriter(path, false,Encoding.UTF8))这个生成的xml看着是没有问题 但是网页IE不能解析,说明有问题,直接去掉Encoding.UTF8即可,不然报错“根级别上的数据无效” using (StreamWriter sw = new StreamWriter(path, false)) { sw.Write(xml); } } 4.//解析XML,指定文件路径,判断文件夹是否存在以及查找文件名 DirectoryInfo di = new DirectoryInfo("Xml"); if (!di.Exists) { Directory.CreateDirectory("Xml"); } if (di.GetFiles().Length > 0) { foreach (FileInfo fi in di.GetFiles()) { if (fi.Name.Contains("Resource.xml")) { var list = SerializerHelper.XmlDeserialize<List<Resources>>("Xml/Resource.xml"); if (list.Count > 0) { } } } }
  • 相关阅读:
    字符串练习题
    算法题
    readLine()
    grep家族
    java_IO
    集合框架
    常用类
    异常
    Mysql 图形工具 Navicat
    Mysql内置功能《一》流程控制
  • 原文地址:https://www.cnblogs.com/jameslif/p/5125064.html
Copyright © 2020-2023  润新知