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!");
                }
            }
        }

  • 相关阅读:
    IOS开发-点击View取消键盘输入
    IOS读写Plist文件最简单方法
    谷歌眼镜Mirror app开发之简单新闻浏览页面
    Shell下获取Android设备信息
    PhpStrom与PyCharm的激活码
    python之数据类型的转换(eval,json.dumps,json.loads)
    网络安全基础2--网络协议,服务,安全
    网络安全基础1
    第二条用例需要用到第一条用例返回结果中的某些值
    python更新字典下嵌套数组下嵌套字典的值
  • 原文地址:https://www.cnblogs.com/luozhai714/p/2174497.html
Copyright © 2011-2022 走看看