Xml的读取

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1.AppCode
{
    using System.Reflection;
    using System.Xml;

    public class XmlTools
    {
        static XmlHelper xmlHelper = new XmlHelper();

        /// <summary>
        /// 将节点属性 转换成  Dictionary<string, string>
        /// </summary>
        /// <param name="nodeName"></param>
        /// <returns></returns>
        public static Dictionary<string, string> GetNodeAttrDict(XmlNode node)
        {
            Dictionary<string, string> dict = new Dictionary<string, string>();

            if (node != null)
            {
                foreach (XmlAttribute attr in node.Attributes)
                {
                    dict.Add(attr.Name, attr.Value);
                }
            }
            return dict;
        }


        /// <summary>
        /// 获取多个节点
        /// </summary>
        /// <param name="xPath"></param>
        /// <returns></returns>
        public static List<XmlNode> GetXmlNodes(string xPath)
        {
            return xmlHelper.GetXmlNodeList(xPath);
        }
        /// <summary>
        /// 获取单个节点
        /// </summary>
        /// <param name="xPath"></param>
        /// <returns></returns>
        public static XmlNode GetXmlNode(string xPath)
        {
            return xmlHelper.GetXmlNode(xPath);
        }
        /// <summary>
        /// 节点转换成实体列表
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="nodes"></param>
        /// <returns></returns>
        public static List<T> ConvertXml2Entity<T>(List<XmlNode> nodes) where T : class,new()
        {
            return xmlHelper.GetEntityListByXmlNode<T>(nodes);
        }

        /// 节点转换为实体
        /// 注意:没有匹配到的字段为NULL
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="node"></param>
        /// <returns></returns>
        public static T ConvertXml2Entity<T>(XmlNode node) where T : class,new()
        {
            return xmlHelper.GetEntityByXmlNode<T>(node);
        }

        /// <summary>
        /// 获取节点文本内容
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public static string GetNoteTxt(XmlNode node)
        {
            return node != null ? node.InnerText : "";
        }
        /// <summary>
        /// 获取节点整数文本
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public static int GetNode2Int(XmlNode node)
        {
            int _result = 0;
            if (node != null)
            {
                int.TryParse(node.InnerText.Trim(), out _result);
            }
            return _result;
        }


    }

    public class XmlHelper
    {
        XmlDocument xmlDoc = new XmlDocument();
        public XmlHelper()
        {
            string xmlPath = HttpRuntime.AppDomainAppPath + "\\Files\\BaseConfig.xml";
            xmlDoc.Load(xmlPath);
        }



        public List<XmlNode> GetXmlNodeList(string nodeName)
        {
            List<XmlNode> list = new List<XmlNode>();
            XmlNodeList nodeList = xmlDoc.SelectNodes(nodeName);
            foreach (XmlNode node in nodeList)
            {
                list.Add(node);
            }
            return list;
        }

        public XmlNode GetXmlNode(string nodeName)
        {
            return xmlDoc.SelectSingleNode(nodeName);
        }

           /// <summary>
        /// 将节点属性 转换成  Dictionary<string, string>
        /// </summary>
        /// <param name="nodeName"></param>
        /// <returns></returns>
        public static Dictionary<string, string> GetNodeAttrDict(XmlNode node)
        {
            Dictionary<string, string> dict = new Dictionary<string, string>();

            if (node != null)
            {
                foreach (XmlAttribute attr in node.Attributes)
                {
                    dict.Add(attr.Name, attr.Value);
                }
            }
            return dict;
        }

        public List<T> GetEntityListByXmlNode<T>(List<XmlNode> nodeList) where T : class,new()
        {
            List<T> list = new List<T>();
            foreach (XmlNode item in nodeList)
            {
                list.Add(GetEntityByXmlNode<T>(item));
            }
            return list;
        }

        public T GetEntityByXmlNode<T>(XmlNode node) where T : class,new()
        {
            return ConvertXml2Entity<T>(node);
        }

        private T ConvertXml2Entity<T>(XmlNode node) where T : class,new()
        {
            if (node == null)
            {
                return default(T);
            }
            var entity = new T();
            List<PropertyInfo> propsList = entity.GetType().GetProperties().ToList();


            foreach (PropertyInfo prop in propsList)
            {
                var nodeObj = node.Attributes[prop.Name];
                if (nodeObj != null)
                {
                    var objValue = GetPropValue(prop.PropertyType.Name, nodeObj.Value);
                    prop.SetValue(entity, objValue, null);
                }
            }

            return entity;
        }


        private object GetPropValue(string propName, string data)
        {
            object obj = data;
            switch (propName)
            {

                case "DateTime":
                    obj = DateTime.Parse(data);
                    break;
                case "Boolean":
                    obj = Boolean.Parse(data);
                    break;
                case "Int32":
                    obj = int.Parse(data);
                    break;
                case "Int64":
                    obj = long.Parse(data);
                    break;
                case "Double":
                    obj = double.Parse(data);
                    break;
            }

            return obj;
        }


    }
}

  

posted @ 2015-08-22 17:10  哈哈2222  阅读(389)  评论(0编辑  收藏  举报