• xmlhelper (把实体对象转成xml文档)


    08:55:14 2012-03-19 public static class XmlHelper
        {
            #region 实体类序列化成xml
            /// <summary>
            ///  实体类序列化成xml
            /// </summary>
            /// <param name="enitities">The enitities.</param>
            /// <param name="headtag">The headtag.</param>
            /// <returns></returns>
            public static string ObjListToXml<T>(List<T> enitities, string headtag)
            {
                StringBuilder sb = new StringBuilder();
                PropertyInfo[] propinfos = null;
                sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                sb.AppendLine("<" + headtag + ">");
                foreach (T obj in enitities)
                {
                    //初始化propertyinfo
                    if (propinfos == null)
                    {
                        Type objtype = obj.GetType();
                        propinfos = objtype.GetProperties();
                    }
                    sb.AppendLine("<item>");
                    foreach (PropertyInfo propinfo in propinfos)
                    {
                        sb.Append("<");
                        sb.Append(propinfo.Name);
                        sb.Append(">");
                        sb.Append(propinfo.GetValue(obj, null));
                        sb.Append("</");
                        sb.Append(propinfo.Name);
                        sb.AppendLine(">");
                    }
                    sb.AppendLine("</item>");
                }
                sb.AppendLine("</" + headtag + ">");
                return sb.ToString();
            }
            #endregion
    
            #region 使用XML初始化实体类容器
            /// <summary>
            ///  使用XML初始化实体类容器
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="typename">The typename.</param>
            /// <param name="xml">The XML.</param>
            /// <param name="headtag">The headtag.</param>
            /// <returns></returns>
            public static List<T> XmlToObjListByNode<T>(string xml, string headtag)
               where T : new()
            {
                List<T> list = new List<T>();
                XmlDocument doc = new XmlDocument();
                PropertyInfo[] propinfos = null;
                doc.LoadXml(xml);
                XmlNodeList nodelist = doc.GetElementsByTagName(headtag);
                foreach (XmlNode node in nodelist)
                {
                    T entity = new T();
                    //初始化propertyinfo
                    if (propinfos == null)
                    {
                        Type objtype = entity.GetType();
                        propinfos = objtype.GetProperties();
                    }
                    //填充entity类的属性
                    foreach (PropertyInfo propinfo in propinfos)
                    {
                        XmlNode cnode = node.SelectSingleNode(propinfo.Name);
                        if (cnode == null)
                            continue;
                        string v = cnode.InnerText;
                        if (v != null)
                            propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);
                    }
                    list.Add(entity);
                }
                return list;
            }
            #endregion
    
            #region 使用XML初始化实体类容器
            /// <summary>
            ///  使用XML初始化实体类容器
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="typename">The typename.</param>
            /// <param name="xml">The XML.</param>
            /// <param name="headtag">The headtag.</param>
            /// <returns></returns>
            public static List<T> XmlToObjListByAttr<T>(string xml, string headtag)
               where T : new()
            {
                List<T> list = new List<T>();
                XmlDocument doc = new XmlDocument();
                PropertyInfo[] propinfos = null;
                doc.LoadXml(xml);
                XmlNodeList nodelist = doc.GetElementsByTagName(headtag);
                foreach (XmlNode node in nodelist)
                {
                    T entity = new T();
                    //初始化propertyinfo
                    if (propinfos == null)
                    {
                        Type objtype = entity.GetType();
                        propinfos = objtype.GetProperties();
                    }
                    //填充entity类的属性
                    foreach (PropertyInfo propinfo in propinfos)
                    {
                        XmlNode cnode = node.Attributes[propinfo.Name.ToLower()];
                        if (cnode == null)
                            continue;
                        string v = cnode.InnerText;
                        if (v != null)
                            propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);
                    }
                    list.Add(entity);
                }
                return list;
            }
            #endregion
    
            /// <summary>
            /// 将对象转换为二进制流
            /// </summary>
            /// <param name="item"></param>
            /// <returns></returns>
            public static byte[] ConvertToXmlStream(this object item)
            {
                var serializer = new XmlSerializer(item.GetType());
                using (MemoryStream ms = new MemoryStream())
                {
                    serializer.Serialize(ms, item);
                    var bytes = ms.ToArray();
                    ms.Close();
                    return bytes;
                }
            }
    
            /// <summary>
            /// 在Xml源中查找指定节点文本
            /// </summary>
            /// <param name="originXml"></param>
            /// <param name="nodeTag"></param>
            /// <returns></returns>
            public static List<string> GetNodeInnerText(string originXml, string nodeTag)
            {
                List<string> strList = new List<string>();
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(originXml);
                XmlNodeList nodes = doc.GetElementsByTagName(nodeTag);
                for (int i = 0; i < nodes.Count; i++)
                {
                    XmlNode node = nodes[i];
                    strList.Add(node.InnerText);
                }
                return strList;
            }
    
            /// <summary>
            ///  使用XML初始化实体类容器
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="typename">The typename.</param>
            /// <param name="xml">The XML.</param>
            /// <param name="headtag">The headtag.</param>
            /// <returns></returns>
            public static List<T> XmlToObjList<T>(string xml, string headtag)
               where T : new()
            {
                List<T> list = new List<T>();
                XmlDocument doc = new XmlDocument();
                PropertyInfo[] propinfos = null;
                doc.LoadXml(xml);
                XmlNodeList nodelist = doc.GetElementsByTagName(headtag);
    
    
    
    
                foreach (XmlNode nodef in nodelist)
                {
                    XmlNodeList itemNodelist = nodef.ChildNodes;
    
                foreach (XmlNode node in itemNodelist)
                {
                    T entity = new T();
                    //初始化propertyinfo
                    if (propinfos == null)
                    {
                        Type objtype = entity.GetType();
                        propinfos = objtype.GetProperties();
                    }
                    //填充entity类的属性
                    foreach (PropertyInfo propinfo in propinfos)
                    {
                        XmlNode cnode = node.SelectSingleNode(propinfo.Name);
                        if (cnode == null)
                            continue;
                        string v = cnode.InnerText;
                        if (v != null)
                            propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);
                    }
                    list.Add(entity);
                }
                }
                return list;
            }
        }
    

      

  • 相关阅读:
    递归练习:走台阶
    递归练习:计算最大公约数和最小公倍数
    递归练习:逆序输出一个十进制数的各位数字
    m4, autoconf
    Makefile 和 CMakeLists.txt
    Java中的String pool
    小米路由Mini刷Breed, 潘多拉和LEDE
    Centos 编译LEDE/OpenWrt
    Centos6下编译安装gcc6.4.0
    IntelliJ IDEA遇到Unable to parse template “Class”错误
  • 原文地址:https://www.cnblogs.com/DamonTang/p/2405477.html
Copyright © 2020-2023  润新知