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