• XML响应通用解释器 上海


     /// <summary>
        /// XML响应通用解释器。
        /// </summary>
        public class XmlParser<T> : IParser<T> where T : Response
        {
            private static Regex regex = new Regex("<(http://www.cnblogs.com/luozhai714/admin/file://w/+?)[ >]", RegexOptions.Compiled);
            private static Hashtable parsers = Hashtable.Synchronized(new Hashtable());

            #region IParser<T> Members

            public T Parse(string body)
            {
                string rootTagName = GetRootElement(body);
                XmlSerializer serializer = parsers[rootTagName] as XmlSerializer;
                if (serializer == null)
                {
                    XmlAttributes rootAttrs = new XmlAttributes();
                    rootAttrs.XmlRoot = new XmlRootAttribute(rootTagName);

                    XmlAttributeOverrides attrOvrs = new XmlAttributeOverrides();
                    attrOvrs.Add(typeof(T), rootAttrs);

                    serializer = new XmlSerializer(typeof(T), attrOvrs);
                    // double check contain
                    if (!parsers.ContainsKey(rootTagName))
                    {
                        parsers.Add(rootTagName, serializer);
                    }
                }

                object obj = null;
                using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(body)))
                {
                    obj = serializer.Deserialize(stream);
                }

                T rsp = (T)obj;
                if (rsp != null)
                {
                    rsp.Body = body;
                }
                return rsp;
            }

            #endregion

            /// <summary>
            /// 获取XML响应的根节点名称
            /// </summary>
            private string GetRootElement(string body)
            {
                Match match = regex.Match(body);
                if (match.Success)
                {
                    return match.Groups[1].ToString();
                }
                else
                {
                    throw new MyException("Invalid XML response format!");
                }
            }
        }

  • 相关阅读:
    C# 中的 ConfigurationManager类引用方法
    添加Word,Excel等dll时如何操作。
    Win7(64位)中IIS配置Access数据库的asp.net程序中出现“未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序”
    sql模糊查询
    Spring中AOP的使用
    MongoDB的孤儿文档是如何产生的
    Docker
    MySql索引优化
    Kafka(分布式流式系统)
    synchronized的底层实现
  • 原文地址:https://www.cnblogs.com/luozhai714/p/2174497.html
Copyright © 2020-2023  润新知