xml文件实现一次性导入功能(泉州需求)

前端之家收集整理的这篇文章主要介绍了xml文件实现一次性导入功能(泉州需求)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.Import.ashx.cs文件代码内容

  1. public void ProcessRequest(HttpContext context)
  2. {
  3. context.Response.Clear();
  4. string username = context.Request.QueryString["username"];//操作人
  5. HttpFileCollection postedFile = context.Request.Files;
  6. //判断是否有数据
  7. if (postedFile != null && postedFile.Count > 0)
  8. {
  9. int length = postedFile[0].ContentLength;//文件大小
  10. string filename = System.IO.Path.GetFileNameWithoutExtension(postedFile[0].FileName);//文件名,不包括扩展名
  11. string path = HttpContext.Current.Server.MapPath("/XmlFiles/");//文件存放路径
  12. if (!System.IO.Directory.Exists(path))
  13. System.IO.Directory.CreateDirectory(path);//创建文件
  14. string allfile = path + filename + DateTime.Now.ToString("yyyy-MM-dd") + ".xml";//文件路径+文件
  15. postedFile[0].SaveAs(allfile);//保存文件内容
  16.  
  17. if (length > 0 && length < 512000)//文件最大允许500k
  18. {
  19. string type = System.IO.Path.GetExtension(postedFile[0].FileName);//文件类型
  20. if (type == ".xml")
  21. {
  22. //读取文件
  23. QzSpecialisticDAL dal = new QzSpecialisticDAL();
  24. QZ_IMPORT_LOG log = new QZ_IMPORT_LOG();
  25. try
  26. {
  27. XmlDocument xmlDoc = new XmlDocument();
  28. //加载xml
  29. xmlDoc.Load(allfile); //path+filename为文件路径
  30.  
  31. //读取指定的节点
  32. #region 1.配送台账:读取QZ_DISPATCH_DETAILS节点
  33.  
  34. QZ_DISPATCH_DETAILS details = dal.GetModels<QZ_DISPATCH_DETAILS>(xmlDoc,"/QZ_SPECIALISTIC/QZ_DISPATCH_DETAILS");
  35. dal.InsertXmlData(details.DetailList,username,out log);
  36.  
  37. log.IMPORT_NAME = "配送台账";//导入界面
  38. if (!dal.AddImportLog(log))
  39. {
  40. string res1 = "{\"status\" : \"success\",\"msg\": \"配送台账日志插入错误上传失败!\"}";
  41. context.Response.Write(res1);
  42. return;
  43. }
  44. #endregion
  45.  
  46. #region 2.零售台账:读取QZ_SPECIALISTIC_SALEDETAILS节点
  47.  
  48. QZ_SPECIALISTIC_SALEDETAILS sales = dal.GetModels<QZ_SPECIALISTIC_SALEDETAILS>(xmlDoc,"/QZ_SPECIALISTIC/QZ_SPECIALISTIC_SALEDETAILS");
  49. dal.InsertXmlData(sales.DetailList,out log);
  50.  
  51. log.IMPORT_NAME = "零售台账";//导入界面
  52. if (!dal.AddImportLog(log))
  53. {
  54. string res1 = "{\"status\" : \"success\",\"msg\": \"零售台账日志插入错误上传失败!\"}";
  55. context.Response.Write(res1);
  56. return;
  57. }
  58. #endregion
  59.  
  60. string res = "{\"status\" : \"success\",\"msg\": \"上传成功!\"}";
  61. context.Response.Write(res);
  62. }
  63. catch (Exception e)
  64. {
  65. string res = "{\"status\" : \"error\",\"msg\": \"文件格式错误上传失败!\"}";
  66. context.Response.Write(res);
  67. return;
  68. }
  69. }
  70. else
  71. {
  72. string res = "{\"status\" : \"error\",\"msg\": \"只允许上传.xml类型的文件!\"}";
  73. context.Response.Write(res);
  74. return;
  75. }
  76. }
  77. else
  78. {
  79. string res = "{\"status\" : \"error\",\"msg\": \"文件过大!\"}";
  80. context.Response.Write(res);
  81. return;
  82. }
  83. }
  84. }

2.所调用方法

InsertXmlData方法,实现入库校验操作:

  1. public void InsertXmlData<T>(List<T> models,string username,out QZ_IMPORT_LOG logmodel) where T : new()
  2. {
  3. QZ_IMPORT_LOG log =new QZ_IMPORT_LOG();
  4. int sum = models.Count;
  5. int j = 0;
  6. string mismessage = "";
  7. string[] s = models.ToString().Split(new char[] { '.' },StringSplitOptions.RemoveEmptyEntries);
  8. string model = s[s.Length - 1].Replace("]","").Trim();
  9.  
  10. if (models != null)//判断节点下是否有子节点
  11. {
  12. //循环遍历detail结点下的子结点
  13. foreach (T submodel in models)
  14. {
  15. //校验Id是否重复
  16. string id = submodel.GetType().GetProperty("ID").GetValue(submodel,null).ToString();
  17. if (ExixtsID(model,id))
  18. {
  19. if (OracleHelper.Insert<T>(submodel))//插入数据库
  20. {
  21. j++;//成功上传条数
  22. }
  23. else
  24. {
  25. //上传失败
  26. mismessage += "id=" + id + "数据插入错误上传失败;";
  27. }
  28. }
  29. else
  30. {
  31. //上传失败
  32. mismessage += "id=" + id + "已导入;";
  33. }
  34. }
  35. //录入上传日志数据
  36. log.IMPORT_DATE = DateTime.Now;//导入时间
  37. log.IMPORT_TABLENAME = model;//导入表名
  38. log.IMPORT_NUM = sum;//导入总条数
  39. log.IMPORT_NUM_OK = j;//导入成功条数
  40. log.REMARK = mismessage;//未成功错误信息
  41. log.OPERATOR = username;//操作人
  42. }
  43. logmodel = log;
  44. }

GetModels方法获取反序列化数据:
  1. public T GetModels<T>(XmlDocument xmlDoc,string singleNode) where T : new()
  2. {
  3. XmlNode xmlNode = xmlDoc.SelectSingleNode(singleNode);
  4. StringReader stream = new StringReader(xmlNode.OuterXml);
  5. string xml = stream.ReadToEnd();
  6. return XmlDeserialize<T>(xml,Encoding.UTF8);
  7. }
XmlDeserialize实现反序列化:
  1. public T XmlDeserialize<T>(string s,Encoding encoding) where T : new()
  2. {
  3. if (string.IsNullOrEmpty(s))
  4. throw new ArgumentNullException("s");
  5. if (encoding == null)
  6. throw new ArgumentNullException("encoding");
  7.  
  8. XmlSerializer mySerializer = new XmlSerializer(typeof(T));
  9. using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s)))
  10. {
  11. using (StreamReader sr = new StreamReader(ms,encoding))
  12. {
  13. return (T)mySerializer.Deserialize(sr);
  14. }
  15. }
  16. }

xml文件格式:
  1. <QZ_SPECIALISTIC><QZ_SPECIALISTIC_DESTROYS>
  2. <QZ_SPECIALISTIC_DESTROY>
  3. <ID>4</ID>
  4. <DESTROY_DATE>2016-01-11</DESTROY_DATE>
  5. <SPECIALISTIC_ID>425002</SPECIALISTIC_ID>
  6. <SPECIALISTIC_NAME>珍新泉港店</SPECIALISTIC_NAME>
  7. <MEAT_CODE>101</MEAT_CODE>
  8. <MEAT_NAME>猪舌</MEAT_NAME>
  9. <WEIGHT>28</WEIGHT>
  10. <OPERATOR>阿玉姐姐</OPERATOR>
  11. <UPLOAD_TYPE>2</UPLOAD_TYPE>
  12. </QZ_SPECIALISTIC_DESTROY>
  13. <QZ_SPECIALISTIC_DESTROY>
  14. <ID>5</ID>
  15. <DESTROY_DATE>2016-01-11</DESTROY_DATE>
  16. <SPECIALISTIC_ID>425002</SPECIALISTIC_ID>
  17. <SPECIALISTIC_NAME>珍新泉港店</SPECIALISTIC_NAME>
  18. <MEAT_CODE>102</MEAT_CODE>
  19. <MEAT_NAME>猪条</MEAT_NAME>
  20. <WEIGHT>t</WEIGHT>
  21. <OPERATOR>阿玉姐姐</OPERATOR>
  22. <UPLOAD_TYPE>2</UPLOAD_TYPE>
  23. </QZ_SPECIALISTIC_DESTROY>
  24. </QZ_SPECIALISTIC_DESTROYS>
  25. <QZ_SPECIALISTIC_SURPLUSS>
  26. <QZ_SPECIALISTIC_SURPLUS>
  27. <ID>1</ID>
  28. <REGISTER_DATE>2016-01-11</REGISTER_DATE>
  29. <SPECIALISTIC_ID>425002</SPECIALISTIC_ID>
  30. <SPECIALISTIC_NAME>珍新泉港店</SPECIALISTIC_NAME>
  31. <span style="white-space:pre"> </span><MEAT_CODE>102</MEAT_CODE>
  32. <MEAT_NAME>猪条</MEAT_NAME>
  33. <WEIGHT>150</WEIGHT>
  34. <OPERATOR>吴老大</OPERATOR>
  35. <span style="white-space:pre"> </span><UPLOAD_TYPE>2</UPLOAD_TYPE>
  36. </QZ_SPECIALISTIC_SURPLUS>
  37. <QZ_SPECIALISTIC_SURPLUS>
  38. <ID>2</ID>
  39. <REGISTER_DATE>2016-01-11</REGISTER_DATE>
  40. <SPECIALISTIC_ID>425002</SPECIALISTIC_ID>
  41. <SPECIALISTIC_NAME>珍新泉港店</SPECIALISTIC_NAME>
  42. <span style="white-space:pre"> </span><MEAT_CODE>102</MEAT_CODE>
  43. <MEAT_NAME>猪条</MEAT_NAME>
  44. <WEIGHT>150</WEIGHT>
  45. <OPERATOR>吴老大</OPERATOR>
  46. <span style="white-space:pre"> </span><UPLOAD_TYPE>2</UPLOAD_TYPE>
  47. </QZ_SPECIALISTIC_SURPLUS>
  48. </QZ_SPECIALISTIC_SURPLUSS></QZ_SPECIALISTIC>

猜你在找的XML相关文章