/// <summary> /// 读取Xml /// </summary> /// <typeparam name="T">对应解析XML文件对象</typeparam> public class XmlHelper<T> where T :class { #region 可以用的代码 //XML文件路径 private string filePath; List<XElement> xelList = new List<XElement>(); public XmlHelper(string filePath) { this.filePath = filePath; } /// <summary> /// 文件路径 /// </summary> public string FilePath { get { return this.filePath; } set { this.filePath = value; } } /// <summary> /// 读取XML文件到自定义对象 /// </summary> /// <returns>List<></returns> public List<T> ReadXmlToObject() { xelList.Clear(); XmlReader reader = GetXmlReader(); Type type = typeof(T); PropertyInfo[] fields = type.GetProperties(); List<T> list = new List<T>(); if (reader != null) { //载入XML文件获取根节点 XElement root = XElement.Load(reader); reader.Close(); if (root.Name == type.Name) { xelList.Add(root); } QueryXelement(root, type.Name); T t = default(T); XElement temp = null; //遍历符合条件的节点 foreach(var e in xelList) { //创建对象实例 t = (T)Activator.CreateInstance(type); foreach (PropertyInfo info in fields) { temp = e.Element(info.Name); if (temp != null) { info.SetValue(t, temp.Value, null); } } list.Add(t); } } return list; } private void QueryTest(XElement xele) { //var temp = from temp in xele.Elements() where temp.Name=="test" ; } /// <summary> /// 分析XML文档节点 /// </summary> /// <param name="xele">要分析的节点</param> /// <param name="typeName">分析对象T的类型名称</param> private void QueryXelement(XElement xele, string typeName) { //返回节点集合 var xeles = from temp in xele.Elements() select temp; //如果符合条件的集合为0,Return if (xeles.Count() == 0) { return; } else { foreach(XElement el in xeles) { if (el.Name == typeName) { xelList.Add(el); } QueryXelement(el, typeName); } } } /// <summary> /// 获取XmlReader /// </summary> /// <returns>XmlReader</returns> private XmlReader GetXmlReader() { XmlReader reader = null; if (File.Exists(filePath)) { reader = XmlReader.Create(filePath); } return reader; } }