示例#1
0
        private Tuple <bool, ResultXmlWithUpdateErrorKind, string> XmlAvailableCheck(string xml)
        {
            bool rtn = false;
            ResultXmlWithUpdateErrorKind errorKind = ResultXmlWithUpdateErrorKind.None;
            string      errContent = "";
            XmlHandling xmlHand    = new XmlHandling();
            XmlDocument xdTmp      = null;

            if (string.IsNullOrEmpty(xml) || string.IsNullOrWhiteSpace(xml))
            {                   // 아얘 아무것도 없는 쓰레기 새끼면
                errorKind = ResultXmlWithUpdateErrorKind.Empty;
            }
            else if (xml.IndexOf("<rs>") != -1)
            {               // XML 내용이 있긴 있는데 에러 관련 XML이면
                xdTmp      = xmlHand.GetXmlDocByString(xml);
                errorKind  = ResultXmlWithUpdateErrorKind.RsXml;
                errContent = xdTmp.SelectSingleNode("//rs").InnerText;
            }
            else if (xml.IndexOf("<response>") != -1)
            {                   // response 요소는 있는데 내용이 NULL 이면
                xdTmp = xmlHand.GetXmlDocByString(xml);
                if (xdTmp.SelectSingleNode("response").InnerText.Trim().ToUpper() == "NULL")
                {
                    errorKind  = ResultXmlWithUpdateErrorKind.Null;
                    errContent = xdTmp.SelectSingleNode("response").InnerText.Trim();
                }
                else
                {
                    rtn = true;
                }
            }
            else
            {
                rtn = true;
            }

            return(Tuple.Create(rtn, errorKind, errContent));
        }
示例#2
0
        public ResultXmlWithUpdateModel GetResultXmlWithUpdate(TrafficInfoDirection direction, string xmlPath, string urlParams)
        {
            ResultXmlWithUpdateModel rtn = new ResultXmlWithUpdateModel(false, ResultXmlWithUpdateErrorKind.None, string.Empty);

            TrafficInfoSettingsModel settings = GetSettings;

            // 혹시라도 xmlPath변수에 저장 디렉토리가 있는지 확인해서 없으면 연결해준다.
            if (xmlPath.IndexOf(settings.ApiXmlPath) == -1)
            {
                xmlPath = Path.Combine(settings.ApiXmlPath, xmlPath);
                // 각 API 네이밍별로 디렉토리가 구성되도록 해야하기 때문에
                // 디렉토리 명을 가져와서 있는지 확인하고 없으면 만든다.
                string tmpPathDir = Path.GetDirectoryName(xmlPath);
                if (!Directory.Exists(tmpPathDir))
                {
                    Directory.CreateDirectory(tmpPathDir);
                }
            }

            XmlDocument xdRtn   = new XmlDocument();
            XmlHandling xmlHand = new XmlHandling();

            string xml = GetResultXml(direction, urlParams);

            if (!string.IsNullOrEmpty(xml))                  // 통신해서 가져온 내용이 있으면
            {
                // 가져온 XML이 이상한 놈인지 아닌지 검사한다
                Tuple <bool, ResultXmlWithUpdateErrorKind, string> tplAvailable = XmlAvailableCheck(xml);
                if (tplAvailable.Item1 == false)
                {
                    rtn = new ResultXmlWithUpdateModel(false, tplAvailable.Item2, tplAvailable.Item3);
                }
                else
                {
                    if (File.Exists(xmlPath))                                   // 파일이 있는지 찾아서 있으면
                    {
                        // 파일 내용을 받아온 xml을 로컬 xml 파일에 갱신한다.
                        XmlDocument xdResult = xmlHand.GetXmlDocByString(xml);
                        XmlDocument xdTarget = xmlHand.GetXmlDocByFilePath(xmlPath);
                        xdRtn = xmlHand.GetXmlDocWithUpdateProceed(xmlPath, xdTarget, xdResult);
                    }
                    else
                    {
                        // XML 파일이 없으면 생성하고 거기다가 갱신한다.
                        XmlDocument xdResult   = xmlHand.GetXmlDocByString(xml);
                        XmlNode     resultResp = xdResult.SelectSingleNode("//response");

                        XmlDocument    xdTmp    = new XmlDocument();
                        XmlDeclaration xDeclare = xdTmp.CreateXmlDeclaration("1.0", "UTF-8", null);
                        xdTmp.AppendChild(xDeclare);

                        XmlNode responselist = xdTmp.CreateElement("responselist");
                        responselist.InnerXml = resultResp.OuterXml;

                        xdTmp.AppendChild(responselist);
                        xdTmp.Save(xmlPath);

                        // 리턴 될 XmlDocument에도 전달해준다
                        xdRtn.LoadXml(xml);
                    }

                    rtn = new ResultXmlWithUpdateModel(true, ResultXmlWithUpdateErrorKind.None, xdRtn.OuterXml);
                }
            }
            else
            {
                rtn = new ResultXmlWithUpdateModel(false, ResultXmlWithUpdateErrorKind.Empty, string.Empty);
            }

            return(rtn);
        }