zoukankan      html  css  js  c++  java
  • 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!");
                }
            }
        }

  • 相关阅读:
    数字签名(代码签名)流程
    (转)__cdecl __fastcall与 __stdcall
    装修主材
    ATL 获取flash信息
    Windows结构化异常
    格式化HRESULT获取对应文本
    which type of VS files should be committed into a version control system
    读Windows核心编程-5-作业
    IE WebBrowser事件触发
    Windows 结构化异常
  • 原文地址:https://www.cnblogs.com/luozhai714/p/2174497.html
Copyright © 2011-2022 走看看