CAPNet.XmlParser.ParseInternal C# (CSharp) Method

ParseInternal() private static method

private static ParseInternal ( XmlDocument document ) : Alert
document System.Xml.XmlDocument
return Alert
        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;
        }