C# xml上傳以及記錄儲存xml
阿新 • • 發佈:2021-06-23
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(); } #endregionView 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; }