您的位置:首页 > 编程语言 > C#

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

2014-03-11 18:02 369 查看
简单的介绍一下生成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)

{

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: