コード例 #1
0
        private string ParseXmlValidity(XmlDocument doc)
        {
            //记录三轮检查结果
            string         tempStr1 = string.Empty;
            string         tempStr2 = string.Empty;
            string         tempStr3 = string.Empty;
            XmlNode        node     = null;
            int            flag     = 0;
            XmlNodeList    oList    = doc.DocumentElement.ChildNodes;
            xmlElementType xeType   = xmlElementType.None;
            //元素不合法标记,用于检查元素是否完整
            List <string> elementTypes = new List <string>()
            {
                "isSSL", "IP", "Port", "RequestType", "RequestMode", "RequestData"
            };

            //遍历检查元素是否都是合法元素
            foreach (XmlNode temp in oList)
            {
                if (!Enum.TryParse(temp.Name, out xeType))
                {
                    tempStr1 += temp.Name.ToLower() + ",";
                    flag++;
                }
                else
                {
                    //如果元素合法,删除不合法标记
                    elementTypes.Remove(temp.Name);
                    //检查合法元素的内容是否是正确格式
                    switch (xeType)
                    {
                    case xmlElementType.isSSL:
                        node      = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        tempStr3 += ((0 == Convert.ToInt32(node.InnerXml)) || (1 == Convert.ToInt32(node.InnerXml))) ? "" : string.Format("[{0}:{1}]\r\n", xeType.ToString(), node.InnerXml);
                        break;

                    case xmlElementType.IP:
                        node = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        string regIP = @"^(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$";
                        if (!Regex.IsMatch(node.InnerXml, regIP))
                        {
                            tempStr3 += string.Format("[{0}:{1}]\r\n", xeType.ToString(), node.InnerXml);
                        }
                        break;

                    case xmlElementType.Port:
                        node = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        string regPort = @"^([0-9]|[1-9]\d{1}|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$";
                        if (!Regex.IsMatch(node.InnerXml, regPort))
                        {
                            tempStr3 += string.Format("[{0}:{1}]\r\n", xeType.ToString(), node.InnerXml);
                        }
                        break;

                    case xmlElementType.RequestMode:
                        node      = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        tempStr3 += (Convert.ToInt32(node.InnerXml) >= 1 || (Convert.ToInt32(node.InnerXml) <= 3)) ? "" : string.Format("[{0}:{1}]\r\n", xeType.ToString(), node.InnerXml);
                        break;

                    case xmlElementType.RequestData:
                    case xmlElementType.RequestType:
                    case xmlElementType.None:
                        break;

                    default:
                        break;
                    }
                }
            }
            //经过三轮检查,如果XML文件有异常刚返回Error信息
            if (elementTypes.Count > 0 || flag > 0 || !string.IsNullOrEmpty(tempStr3))
            {
                string xmlError = string.Empty;
                if (elementTypes.Count > 0)
                {
                    foreach (string item in elementTypes)
                    {
                        tempStr2 += item + ',';
                    }
                    xmlError += string.Format("缺失必要节点: \r\n{0}\r\n", tempStr2.Trim(','));
                }
                if (flag > 0)
                {
                    xmlError += string.Format("名称不合法节点: \r\n{0}\r\n", tempStr1.Trim(','));
                }
                if (!string.IsNullOrEmpty(tempStr3))
                {
                    xmlError += string.Format("格式不正确的节点:\r\n{0}\r\n", tempStr3);
                }
                return(xmlError);
            }
            return(tempStr1);
        }
コード例 #2
0
        private string ParseXml(XmlDocument doc, xmlElementType xeType)
        {
            string  tempStr = string.Empty;
            XmlNode node    = null;

            try
            {
                if (doc.DocumentElement != null)
                {
                    switch (xeType)
                    {
                    case xmlElementType.isSSL:
                        node    = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        tempStr = (0 == Convert.ToInt32(node.InnerXml)) ? "http://" : "https://";
                        break;

                    case xmlElementType.IP:
                        node = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        string regIP = @"^(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$";
                        if (Regex.IsMatch(node.InnerXml, regIP))
                        {
                            tempStr = node.InnerXml;
                        }
                        else
                        {
                            tempStr = "错误的IP";
                        }
                        break;

                    case xmlElementType.Port:
                        node = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        string regPort = @"^([0-9]|[1-9]\d{1}|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$";
                        if (Regex.IsMatch(node.InnerXml, regPort))
                        {
                            tempStr = node.InnerXml;
                        }
                        else
                        {
                            tempStr = "错误的端口号";
                        }
                        break;

                    case xmlElementType.RequestType:
                        node    = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        tempStr = node.InnerXml;
                        break;

                    case xmlElementType.RequestMode:
                        node    = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        tempStr = node.InnerXml;
                        break;

                    case xmlElementType.RequestData:
                        node    = doc.DocumentElement.SelectSingleNode(xeType.ToString());
                        tempStr = JsonConvert.SerializeXmlNode(node, Newtonsoft.Json.Formatting.Indented, true);
                        break;

                    case xmlElementType.None:
                        break;

                    default:
                        break;
                    }
                }
            }
            catch (NullReferenceException)
            {
                tempStr = string.Format("元素不存在。");
            }
            catch (Exception ex)
            {
                tempStr = ex.Message;
            }
            return(tempStr);
        }