1. 程式人生 > 其它 >C# xml上傳以及記錄儲存xml

C# xml上傳以及記錄儲存xml

1.xml儲存

 
private readonly string XMLSavePath = Path.Combine(Environment.CurrentDirectory, "XML", GlobalParam.Today);
#region 儲存互動的XML /// <summary> /// 儲存XML互動資料 /// </summary> /// <param name="xml">json</param> /// <param name="fileName">儲存名稱</param>
/// <param name="inOrOut">輸入還是輸入json</param> private void SaveInteractiveXMLData(string xml, string fileName, bool inOrOut) { if(GlobalParam.Params.SaveInteractiveXMLData == "1") { // 拼接完整檔名 if(inOrOut) fileName
= Path.Combine(XMLSavePath, $"{fileName}_In.xml"); else fileName = Path.Combine(XMLSavePath, $"{fileName}_Out.xml"); // 建立檔案並儲存 if (File.Exists(fileName)) File.Delete(fileName); using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) {
byte[] bytes = Encoding.Default.GetBytes(xml); fs.Write(bytes, 0, bytes.Length); } } } #endregion

2.拼接XML案例

#region 獲取上傳用XML檔案
        private string GetXML(StudentSignUploadInfo entity, int djc)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("<?xml version=\"1.0\" encoding=\"GBK\"?>");
            // 根節點
            sb.Append("<drvexam>");
            // 流水號
            sb.Append("<lsh>").Append(entity.Lsh).Append("</lsh>");
            // 考場程式碼
            sb.Append("<kcdm>").Append(entity.Kcdm).Append("</kcdm>");
            // 考試科目
            sb.Append("<kskm>").Append(entity.Kskm).Append("</kskm>");
            // 身份證明號碼
            sb.Append("<sfzmhm>").Append(entity.Sfzmhm).Append("</sfzmhm>");
            // 培訓駕校簡稱
            sb.Append("<jxjc>").Append(entity.Jxmc).Append("</jxjc>");
            // 考試日期
            sb.Append("<ksrq>").Append(entity.Ksrq).Append("</ksrq>");
            // 預約次數
            sb.Append("<yycs>").Append(entity.Yycs).Append("</yycs>");
            // 考試車號
            sb.Append("<ksch>").Append(entity.Kcbh).Append("</ksch>");
            // 考試員簽名
            sb.Append("<ksyqm>").Append(entity.Kgqmzp).Append("</ksyqm>");
            // 考生簽名
            sb.Append("<ksqm>").Append(entity.Ksqmzp).Append("</ksqm>");
            // 人證(門禁)照片
            sb.Append("<rzzp>").Append(entity.Rzzp).Append("</rzzp>");
            #region 第一次
            if (djc == 1)
            {
                // 本次預約考試次數
                sb.Append("<bcyykscs>").Append(1).Append("</bcyykscs>");
                // 考試開始時間
                sb.Append("<kssj>").Append(entity.Kssj1).Append("</kssj>");
                // 考試結束時間
                sb.Append("<jssj>").Append(entity.Jssj1).Append("</jssj>");
                // 考試成績
                sb.Append("<kscj>").Append(entity.Jgfs1).Append("</kscj>");
                // 扣分項
                sb.Append("<kfx>").Append(entity.Kfxx1).Append("</kfx>");
                // 考試過程照片1
                sb.Append("<gczp1>").Append(entity.Zp1_1).Append("</gczp1>");
                // 照片拍攝時間1
                sb.Append("<pssj1>").Append(entity.Zp1sj_1).Append("</pssj1>");
                // 考試過程照片2
                sb.Append("<gczp2>").Append(entity.Zp2_1).Append("</gczp2>");
                // 照片拍攝時間2
                sb.Append("<pssj2>").Append(entity.Zp2sj_1).Append("</pssj2>");
                // 考試過程照片3
                sb.Append("<gczp3>").Append(entity.Zp3_1).Append("</gczp3>");
                // 照片拍攝時間3
                sb.Append("<pssj3>").Append(entity.Zp3sj_1).Append("</pssj3>");
            }
            #endregion
            #region 第二次
            else
            {
                // 本次預約考試次數
                sb.Append("<bcyykscs>").Append(2).Append("</bcyykscs>");
                // 考試開始時間
                sb.Append("<kssj>").Append(entity.Kssj2).Append("</kssj>");
                // 考試結束時間
                sb.Append("<jssj>").Append(entity.Jssj2).Append("</jssj>");
                // 考試成績
                sb.Append("<kscj>").Append(entity.Jgfs2).Append("</kscj>");
                // 扣分項
                sb.Append("<kfx>").Append(entity.Kfxx2).Append("</kfx>");
                // 考試過程照片1
                sb.Append("<gczp1>").Append(entity.Zp1_2).Append("</gczp1>");
                // 照片拍攝時間1
                sb.Append("<pssj1>").Append(entity.Zp1sj_2).Append("</pssj1>");
                // 考試過程照片2
                sb.Append("<gczp2>").Append(entity.Zp2_2).Append("</gczp2>");
                // 照片拍攝時間2
                sb.Append("<pssj2>").Append(entity.Zp2sj_2).Append("</pssj2>");
                // 考試過程照片3
                sb.Append("<gczp3>").Append(entity.Zp3_2).Append("</gczp3>");
                // 照片拍攝時間3
                sb.Append("<pssj3>").Append(entity.Zp3sj_2).Append("</pssj3>");
            }
            #endregion

            sb.Append("</drvexam>");

            return sb.ToString();
        }
        #endregion
View Code

3.上傳XML

  #region[構建請求,獲取資料]
        private bool UploadXML(string xml, out string message)
        {
            bool result = true;
            message = string.Empty;
            try
            {
                HttpWebRequest request = null;
                request = WebRequest.Create(GlobalParam.Params.RemoteWebServiceUrl) as HttpWebRequest;
                request.Method = "POST";
                request.ContentType = "application/xml";

                using (Stream requestStream = request.GetRequestStream())
                {
                    using (StreamWriter sw = new StreamWriter(requestStream, Encoding.GetEncoding("GBK")))
                    {
                        sw.Write(xml);
                    }
                }

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                using (Stream responseStream = response.GetResponseStream())
                {
                    using (StreamReader sr = new StreamReader(responseStream))
                    {
                        message = sr.ReadToEnd();
                    }
                }
            }
            catch (Exception ex)
            {
                log4NetUtil.Error("UploadXML", ex);
                message = $"{ex.Message}";
                result = false;
            }
            return result;
        }
        #endregion

4.呼叫參考

   // 生成XML
                    string xml = this.GetXML(entity, 2);
                    // 儲存輸入XML
                    this.SaveInteractiveXMLData(xml, $"{entity.Xm}_{entity.Sfzmhm}_2", true);
                    // 上傳
                    bool result = UploadXML(xml, out xml);
                    if (result)
                    {
                        if (!string.IsNullOrEmpty(xml))
                        {
                            // 儲存輸出XML
                            this.SaveInteractiveXMLData(xml, $"{entity.Xm}_{entity.Sfzmhm}_2", false);
                            // 解析XML
                            XmlDocument xmlDoc = new XmlDocument();
                            xmlDoc.LoadXml(xml);
                            XmlNode node = xmlDoc.SelectSingleNode("/result");
                            string code = node.Attributes["code"].Value;
                            string message = node.Attributes["message"].Value;
                            // 成功
                            if (code == "1")
                            {
                                this.SaveSignUploadResultToDB(entity, true);
                                entity.KL_sign_upload_2 = 1;
                                entity.UploadMessage_2 = message;
                            }
                            // 失敗
                            else
                            {
                                entity.UploadMessage_2 = $"上傳失敗:{code}_{message}";
                                SoundPlayerUtils.PlaySound();
                                return;
                            }
                        }
                        else
                        {
                            entity.UploadMessage_2 = $"呼叫上傳介面無返回";
                            return;
                        }
                    }
                    else
                    {
                        entity.UploadMessage_2 = $"呼叫上傳介面失敗:{xml}";
                        return;
                    }