read xml test

/// <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;
        }
}

原文地址:https://www.cnblogs.com/zjmsky/p/4818157.html