//using System;
//using System.Collections.Generic;
//using System.Text;
//using System.Xml;

//namespace LpSDK
//{
//    /// <summary>
//    /// SDK配置文件解析类
//    ///  <?xml version="1.0" encoding="utf-8"?><root TaskFile="F:\LpSDK\bin\Debug\Projects\testcmd.lp" SKey="081c5f101bed6d44" WindowState="0" LogFilePath="F:\LpSDK\bin\Debug\test.txt" ResultFile="F:\LpSDK\bin\Debug\result.xml" ShowTime="0"><Varlist><关键词>改革</关键词><查询页码>改革</查询页码></Varlist></root>
//    /// </summary>
//    public class TaskConfig
//    {
//        /// <summary>
//        /// 任务运行名称
//        /// </summary>
//        public string TaskName = "";

//        /// <summary>
//        /// 任务脚本文件路径，不得为空
//        /// </summary>
//        public string TaskFile = "";

//        /// <summary>
//        /// 开发版SDK的Key，分为单机加密狗版，无限授权版，试用版
//        /// 加密狗版本用户的SKey值为 ukey:用户名。试用SDK请点击脚本编辑器上的工具菜单，获取SDK试用Key，然后将key发给客服人员,再获取注册码，使用 trial:注册码 来进行测试。无限授权版为 nolimit:授权码
//        /// </summary>
//        public string SKey = "";

//        /// <summary>
//        /// 缓存文件目录,不指定系统自动创建
//        /// </summary>
//        public string CacheFiles = "";

//        /// <summary>
//        /// 浏览器窗口显示模式，0:默认大小,1:最小化,2:最大化
//        /// </summary>
//        public int WindowState = 0;

//        /// <summary>
//        /// 日志文件目录，空为不写日志
//        /// </summary>
//        public string LogFilePath = "";

//        /// <summary>
//        /// 返回的所有变量值保存的文件,为空不返回值
//        /// </summary>
//        public string ResultFile = "";

//        /// <summary>
//        /// 脚本运行完成后界面还显示多长时间，方便用户查看结果，不然是直接关闭
//        /// </summary>
//        public int ShowTime = 0;

//        /// <summary>
//        /// 要修改的只读字符变量的键值对
//        /// </summary>
//        public Dictionary<string, string> VarStrDic = new Dictionary<string, string>();

//        /// <summary>
//        /// 要修改的列表变量值
//        /// </summary>
//        public Dictionary<string, List<string>> VarListDic = new Dictionary<string, List<string>>();

//        /// <summary>
//        /// 显示运行中的日志信息
//        /// </summary>
//        public bool ShowRunLog = false;

//        /// <summary>
//        /// 代理ip
//        /// </summary>
//        public string ProxyIP = "";

//        /// <summary>
//        /// 代理用户名
//        /// </summary>
//        public string ProxyUserName = "";

//        /// <summary>
//        /// 代理密码
//        /// </summary>
//        public string ProxyPassword = "";

//        /// <summary>
//        /// 代理端口
//        /// </summary>
//        public int ProxyPort = 0;


//        /// <summary>
//        /// 将配置文件生成xml并urlencode处理，然后由命令行传给脚本运行器
//        /// </summary>
//        /// <returns></returns>
//        public override string ToString()
//        {
//            if (!System.IO.File.Exists(TaskFile)) throw new Exception("脚本文件不存在");
//            if (string.IsNullOrEmpty(SKey)) throw new Exception("SKey不得为空");

//            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
//            System.Xml.XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
//            doc.AppendChild(dec);
//            System.Xml.XmlElement root = doc.CreateElement("root");
//            if (!string.IsNullOrEmpty(TaskName)) root.SetAttribute("TaskName", TaskName);
//            root.SetAttribute("TaskFile", TaskFile);
//            root.SetAttribute("SKey", SKey);
//            if (!string.IsNullOrEmpty(CacheFiles)) root.SetAttribute("CacheFiles", CacheFiles);
//            root.SetAttribute("WindowState", WindowState.ToString());
//            if (!string.IsNullOrEmpty(LogFilePath)) root.SetAttribute("LogFilePath", LogFilePath);
//            if (!string.IsNullOrEmpty(ResultFile)) root.SetAttribute("ResultFile", ResultFile);
//            root.SetAttribute("ShowTime", ShowTime.ToString());
//            if (ShowRunLog) root.SetAttribute("ShowRunLog", ShowRunLog.ToString());

//            XmlNode varstr = doc.CreateNode(XmlNodeType.Element, "VarStrDic", "");
//            foreach (KeyValuePair<string, string> kv in VarStrDic)
//            {
//                XmlNode node = doc.CreateNode(XmlNodeType.Element, kv.Key, "");
//                node.InnerText = kv.Value;
//                varstr.AppendChild(node);
//            }
//            root.AppendChild(varstr);

//            foreach (KeyValuePair<string, List<string>> lst in this.VarListDic)
//            {
//                XmlNode varlist = doc.CreateNode(XmlNodeType.Element, "VarListDic","");
//                varlist.InnerText = lst.Key;
//                foreach (string str in lst.Value)
//                {
//                    XmlNode child = doc.CreateNode(XmlNodeType.Element, "List", "");
//                    child.InnerText = str;
//                    varlist.AppendChild(child);
//                }
//                root.AppendChild(varlist);
//            }

//            root.SetAttribute("ProxyIp", ProxyIP);
//            root.SetAttribute("ProxyUserName", ProxyUserName);
//            root.SetAttribute("ProxyPassword", ProxyPassword);
//            root.SetAttribute("ProxyPort", ProxyPort.ToString());

//            doc.AppendChild(root);
//            return System.Web.HttpUtility.UrlEncode(doc.OuterXml);
//        }

//        public static TaskConfig FromXmlString(string xml)
//        {
//            TaskConfig taskConfig = new TaskConfig();
//            if (string.IsNullOrEmpty(xml) || !xml.StartsWith("<?xml")) throw new Exception("文件解析出错");
//            XmlDocument doc = new XmlDocument();
//            doc.LoadXml(xml);
//            XmlElement root = doc.DocumentElement;
//            try
//            {
//                taskConfig.TaskName = root.GetAttribute("TaskName");//.Attributes["TaskName"].InnerText;
//                taskConfig.TaskFile = root.GetAttribute("TaskFile");//.Attributes["TaskFile"].InnerText;
//                taskConfig.SKey = root.GetAttribute("SKey");// root.Attributes["SKey"].InnerText;
//                taskConfig.CacheFiles = root.GetAttribute("CacheFiles");
//                taskConfig.WindowState = int.Parse(root.GetAttribute("WindowState"));

//                if (root.GetAttribute("ShowRunLog") != null && root.GetAttribute("ShowRunLog") != "") taskConfig.ShowRunLog = true;

//                taskConfig.LogFilePath = root.GetAttribute("LogFilePath");
//                taskConfig.ResultFile = root.GetAttribute("ResultFile");
//                taskConfig.ShowTime = int.Parse(root.GetAttribute("ShowTime"));
//                taskConfig.VarStrDic = new Dictionary<string, string>();

//                //旧版处理字符串的支持
//                XmlNode oldstrlist = root.SelectSingleNode("Varlist");
//                if (oldstrlist != null)
//                {
//                    XmlNodeList varlist = oldstrlist.ChildNodes;
//                    for (int i = 0; i < varlist.Count; i++)
//                    {
//                        if (!taskConfig.VarStrDic.ContainsKey(varlist[i].Name)) taskConfig.VarStrDic.Add(varlist[i].Name, varlist[i].InnerText);
//                    }
//                }
//                //旧版结束

//                //防止传入旧版值出错
//                XmlNode newstrlist = root.SelectSingleNode("VarStrDic");
//                if (newstrlist != null)
//                {
//                    XmlNodeList varlist = newstrlist.ChildNodes;
//                    for (int i = 0; i < varlist.Count; i++)
//                    {
//                        if (!taskConfig.VarStrDic.ContainsKey(varlist[i].Name)) taskConfig.VarStrDic.Add(varlist[i].Name, varlist[i].InnerText);
//                    }
//                }


//                foreach (XmlNode xn in root.SelectNodes("VarListDic"))
//                {
//                    string key = xn.InnerText;
//                    List<string> ls = new List<string>();
//                    foreach (XmlNode child in xn.ChildNodes)
//                    {
//                        ls.Add(child.InnerText);
//                    }
//                    if (!taskConfig.VarListDic.ContainsKey(key)) taskConfig.VarListDic.Add(key, ls);
//                }


//                string proxyport = root.GetAttribute("ProxyPort");
//                if (System.Text.RegularExpressions.Regex.IsMatch(proxyport,"^\\d+?$")) taskConfig.ProxyPort = int.Parse(proxyport);
//                taskConfig.ProxyIP = root.GetAttribute("ProxyIP");
//                taskConfig.ProxyUserName = root.GetAttribute("ProxyUserName");
//                taskConfig.ProxyPassword = root.GetAttribute("ProxyPassword");

//            }
//            catch (Exception ex)
//            {
//                throw new Exception("解析出错", ex);
//            }

//            return taskConfig;
//        }
//    }
//}