private static Alert ParseInternal(XmlDocument document) { var alert = new Alert(); XmlNodeList elements = document.GetElementsByTagName("alert", "urn:oasis:names:tc:emergency:cap:1.1"); foreach (XmlNode element in elements) { foreach (XmlNode alertNode in element.ChildNodes) { switch (alertNode.Name) { case "identifier": alert.Identifier = alertNode.InnerText; break; case "sender": alert.Sender = alertNode.InnerText; break; case "sent": alert.Sent = DateTime.Parse(alertNode.InnerText); break; case "status": // TODO: Parse status to enum alert.Status = Status.Test; break; case "msgType": // TODO: Parse message type to enum alert.MessageType = MessageType.Alert; break; case "source": alert.Source = alertNode.InnerText; break; case "scope": // TODO: Parse scope to enum alert.Scope = Scope.Public; break; case "restriction": alert.Restriction = alertNode.InnerText; break; case "addresses": alert.Addresses = alertNode.InnerText; break; case "code": alert.Code = alertNode.InnerText; break; case "note": alert.Note = alertNode.InnerText; break; case "references": alert.References = alertNode.InnerText; break; case "incidents": alert.Incidents = alertNode.InnerText; break; case "info": var info = new Info(); foreach (XmlNode infoNode in alertNode.ChildNodes) { switch (infoNode.Name) { case "language": info.Language = infoNode.InnerText; break; case "category": //info.Category = infoNode.InnerText; break; case "event": info.Event = infoNode.InnerText; break; case "responseType": info.ResponseType = infoNode.InnerText; break; case "urgency": info.Urgency = infoNode.InnerText; break; case "severity": Severity severity; if (Enum.TryParse(infoNode.InnerText, out severity)) { info.Severity = severity; } else { info.Severity = null; } break; case "certainty": info.Certainty = infoNode.InnerText; break; case "audience": info.Audience = infoNode.InnerText; break; case "eventCode": info.EventCode = infoNode.InnerText; break; case "effective": info.Effective = DateTime.Parse(infoNode.InnerText); break; case "onset": info.Onset = DateTime.Parse(infoNode.InnerText); break; case "expires": info.Expires = DateTime.Parse(infoNode.InnerText); break; case "senderName": info.SenderName = infoNode.InnerText; break; case "headline": info.Headline = infoNode.InnerText; break; case "description": info.Description = infoNode.InnerText; break; case "instruction": info.Instruction = infoNode.InnerText; break; case "web": info.Web = infoNode.InnerText; break; case "contact": info.Contact = infoNode.InnerText; break; case "area": var area = new Area(); foreach (XmlNode areaNode in infoNode.ChildNodes) { switch (areaNode.Name) { case "areaDesc": area.Description = areaNode.InnerText; break; default: break; } } info.Areas.Add(area); break; default: break; } } alert.Info.Add(info); break; default: break; } } } return alert; }