xml文件数据上报——根据模型生成对应的xml文件进行上报

1.引入命名空间:System.Xml

2.xml数据格式-xml存放位置 \XmlFiles\jgsj\AddAdminSuperItemInfo.xml

<?xml version="1.0" encoding="utf-8" ?>
<!--新增行政监管事项信息-->
<Data>
  <AdminSuperItemInfo>
    <tenderProjectName>项目名称</tenderProjectName>
    <tenderProjectCode>项目编号</tenderProjectCode>
    <bidSectionCode>标段(包)编号</bidSectionCode>
    <bidSectionName>标段(包)名称</bidSectionName>
    <unifiedDealCode>统一交易标识码</unifiedDealCode>
    <projectType>项目类型</projectType>
    <tradeType>交易方式</tradeType>
    <tradeStep>交易环节</tradeStep>
    <approvalProject>监管事项</approvalProject>
    <goverment>监管单位</goverment>
    <area>行政区域</area>
    <law>法律法规政策依据</law>
    <isPast>是否通过</isPast>
    <content>监管意见</content>
    <signature>审批人电子签名</signature>
    <attachmentSetCode>【附件】附件关联标识号</attachmentSetCode>
    <approvalDate>监管时间</approvalDate>
    <platformCode>交易平台标识码</platformCode>
    <pubServicePlatCode>公共服务平台标识码</pubServicePlatCode>
    <dataTimestamp>数据时间戳</dataTimestamp>
  </AdminSuperItemInfo>
</Data>

<?xml version="1.0" encoding="utf-8" ?>
<Data>
  <File>
    <fileByte>BASE64加密(Byte[]数据)</fileByte>
    <fileName>文件名称</fileName>
    <fileTitle>文件标题(如:立项批复文件(项目审批核准文件))</fileTitle>
  </File>
</Data>

UploadFile.xml

3.上报

protected void btnReport_Click(object sender, EventArgs e)
{
//上报
XmlDataDocument doc = new XmlDataDocument();
//加载xml文件
             doc.Load(Server.MapPath(@"\XmlFiles\jgsj\AddAdminSuperItemInfo.xml"));
string log = "";
//保存新加载的xml文件 用于测试上报的时候使用
log = doc.InnerXml;
//获取节点的所有子节点
var nodes = doc.SelectSingleNode("/Data/AdminSuperItemInfo").ChildNodes;
//XTYPE 是通过反射的方法获取S_ZADMINSUPERITEMINFO表中的特定数据 这里可以重新查询出相应的数据进行填充
S_ZADMINSUPERITEMINFO project = XTYPE as S_ZADMINSUPERITEMINFO;

#region xml数据组装
            //fileds为需要显示的数据
            foreach (var filed in fileds)
            {
                string fileUploadNames = "";
                //取到属性
                PropertyInfo property = type.GetProperty(filed.FiledName.ToUpper());
                //找到project类中property属性的值
                var value = property.GetValue(project);
                //当前filed.FiledName是否是文件上传控件 如果是就需要向省上上报附件文件
                var fileControl = SpecialControls.FirstOrDefault(p => p.CType == ContorlType.fileUpload && p.FiledName.ToLower() == filed.FiledName.ToLower());
                //是附件 并且有值的时候进行上报
                #region 上报附件
                if (fileControl != null && value != null)
                {
                    //处理上传文件 各文件之间用分号隔开
                    string[] fileNames = value.ToString().Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
                    XmlDataDocument fileDoc = new XmlDataDocument();
                    //获取上报附件的xml文件
                    fileDoc.Load(Server.MapPath(@"\XmlFiles\UploadFile.xml"));
                    //创建此节点的一个副本
                    var fileNode = fileDoc.SelectSingleNode("/Data/File").Clone();
                    //移出所有子节点
                    fileDoc.SelectSingleNode("/Data").RemoveAll();
                    foreach (var fileName in fileNames)
                    {
                        XmlNode newFileNode = fileNode.Clone();
                        //循环加载附件
                        //读取文件转换为Base64
                        string base64Str = Common.FileConvertBase64(Server.MapPath(fileName));
                        string fileSortName = fileName.Substring(fileName.LastIndexOf("/") + 1, fileName.Length - fileName.LastIndexOf("/") - 1);
                        fileSortName = fileSortName.Substring(0, fileSortName.LastIndexOf("_")) + fileSortName.Substring(fileSortName.LastIndexOf("."), fileSortName.Length - fileSortName.LastIndexOf("."));
                        //替换xml文件中的值
                        newFileNode.SelectSingleNode("/fileByte").InnerText = base64Str;
                        newFileNode.SelectSingleNode("/fileName").InnerText = fileSortName;
                        newFileNode.SelectSingleNode("/fileTitle").InnerText = fileSortName.Substring(0, fileSortName.LastIndexOf("."));
                        fileDoc.SelectSingleNode("/Data").AppendChild(newFileNode);
                    }
                    //使用省上的接口进行上报数据
                    using (ScToubao.toubiaoSoapClient toubiao = new ScToubao.toubiaoSoapClient())
                    {
                        //上传文件的附件
                        string uploadResult = toubiao.UpLoadFile(APIKEY, fileDoc.InnerXml);
                        XmlDocument uploadDoc = new XmlDocument();
                        uploadDoc.LoadXml(uploadResult);
                        if (uploadDoc.SelectSingleNode("/Result/Status").InnerText.Trim() == "1")
                        {
                            fileUploadNames = uploadDoc.SelectSingleNode("/Result/Details").InnerText.Trim();
                        }
                        using (LsyjEntities data = new LsyjEntities())
                        {
                            //记录上报日志
                            DataLog.AddReportLog(data, int.Parse(uploadDoc.SelectSingleNode("/Result/Status").InnerText.Trim()), (int)userInfo.ID, 0, "XX", "UpLoadFile", uploadResult);
                            data.SaveChanges();
                        }
                        if (fileUploadNames.Length > 0)
                            fileUploadNames = fileUploadNames.Replace(",", ";");
                    }
                }
                #endregion
                #region 组装其他需要上报的数据
                foreach (XmlElement node in nodes)
                {
                    //类属性名称和xml节点名称一致
                    if (node.Name.ToUpper() == filed.FiledName)
                    {

                        node.InnerText = "";
                        if (fileUploadNames.Length > 0)
                            node.InnerText = fileUploadNames;
                        else
                            if (value != null)
                            {
                                if (value.GetType().Name == "DateTime")
                                    node.InnerText = ((DateTime)value).ToString("yyyyMMddHHmmss");
                                else
                                    node.InnerText = value.ToString();
                            }
                            else
                                node.InnerText = "";
                    }
                }
                #endregion
            }
            #endregion

xml数据组装及附件上报

string result = "";

#region 测试服务器上报数据 TestReg 先测试上报,如果测试上报不成功,则不能上报
            string msg;
            if (!TestReport.Report(doc.InnerXml, ReportDataType.AddAdminSuperItemInfo, out msg))
            {
                XmlDocument root = new XmlDocument();
                root.LoadXml(log);
                var nodess = root.SelectSingleNode("/Data/AdminSuperItemInfo").ChildNodes;
                foreach (XmlElement node in nodess)
                {
                    if (msg.Contains(node.Name))
                    {
                        var na = node.Name;
                        var news = node.InnerText;
                        msg = msg.Replace(na + "", news);
                    }
                }
                project.REMARK = ConfigurationManager.AppSettings["Msg"] + msg;
                project.ISSENDOK = -2;
                using (LsyjEntities data = new LsyjEntities())
                {
                    data.Entry(project).State = System.Data.EntityState.Modified;
                    data.SaveChanges();
                }
                Response.Write(string.Format("<script type=‘text/javascript‘>alert(‘{0}‘);</script>", msg));
                return;
            }
            #endregion

测试服务器上报数据 TestReg 先测试上报,如果测试上报不成功,则不能上报

#region 正式上报数据
            try
            {
                using (ScToubao.toubiaoSoapClient toubiao = new ScToubao.toubiaoSoapClient())
                {
                    result = toubiao.AddAdminSuperItemInfo(APIKEY, doc.InnerXml);
                    XmlDocument docResult = new XmlDocument();
                    docResult.LoadXml(result);
                    int isOk = int.Parse(docResult.SelectSingleNode("/Result/Status").InnerText);
                    //0:编辑;1,提交审核;-1,审核退回;2,报送成功;-2,报送异常
                    if (isOk == 1)
                        project.ISSENDOK = 2;
                    else
                        project.ISSENDOK = -2;

                    using (LsyjEntities data = new LsyjEntities())
                    {
                        //记录日志
                        DataLog.AddOperationLog(data, Request.UserHostAddress, (int)userInfo.ID, project.ADMINSUPERITEMINFOID + ",上报", OperationType.Report, project.ADMINSUPERITEMINFOID, "S_ZADMINSUPERITEMINFO");
                        //记录上报日志
                        DataLog.AddReportLog(data, isOk, (int)userInfo.ID, (int)project.ADMINSUPERITEMINFOID, "S_ZADMINSUPERITEMINFO", "AdminSuperItemInfo", result);
                        //如果上报异常,记录异常原因
                        string content = "";
                        if (project.ISSENDOK == -2)
                        {
                            content = docResult.SelectSingleNode("/Result/Details").InnerText;
                            XmlDocument root = new XmlDocument();
                            root.LoadXml(log);
                            var nodess = root.SelectSingleNode("/Data/AdminSuperItemInfo").ChildNodes;
                            foreach (XmlElement node in nodess)
                            {
                                if (content.Contains(node.Name))
                                {
                                    var na = node.Name;
                                    var news = node.InnerText;
                                    content = content.Replace(na + "", news);
                                }
                            }
                            project.REMARK = content;
                            var url = HttpContext.Current.Request.Url.AbsolutePath.ToString().Replace("Edit", "List").Replace("edit", "List");
                            Response.Write(string.Format("<script type=‘text/javascript‘>alert(‘{0}‘); window.location.href =‘" + url + "‘;</script>", content));
                        }
                        if (project.ISSENDOK == 2)
                        {
                            project.REMARK = "";
                        }
                        data.Entry(project).State = System.Data.EntityState.Modified;
                        data.SaveChanges();
                        //if (project.ISSENDOK != -2)
                        //{
                        //    Response.Write(string.Format("<script type=‘text/javascript‘>alert(‘{0}‘) ;window.location.href =‘{1}‘;</script>", "报送成功", HttpContext.Current.Request.Url.AbsolutePath.ToString().Replace("Edit", "List")));
                        //}
                        if (content != "")
                        {
                            Response.Write(string.Format("<script type=‘text/javascript‘>alert(‘{0}‘);window.location.href =‘{1}‘;</script>", content, HttpContext.Current.Request.Url.ToString()));
                            return;
                        }
                        else
                        {
                            Response.Write(string.Format("<script type=‘text/javascript‘>alert(‘{0}‘) ;window.location.href =‘{1}‘;</script>", "报送成功", HttpContext.Current.Request.Url.AbsolutePath.ToString().Replace("Edit", "List")));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Lsyj.Common.Common.WriteExceptionLog(ex);
            }
            #endregion

正式上报数据

}

其他、通过反射调用接口方法

string msg="";Report("需要上报的doc.InnerXml文件", "AddAdminSuperItemInfo", out msg);
/// <summary>
        /// 数据上报
        /// </summary>
        /// <param name="xmlString">需要上报的xml文件</param>
        /// <param name="dataType">需要上报的方法名称 可以定义为枚举 以防写作</param>
        /// <param name="msg">输出的msg文件</param>
        /// <returns></returns>
        public static bool Report(string xmlString, ReportDataType dataType, out string msg)
        {
            //配置文件判断是否需要上报 1需要上报
            if (ConfigurationManager.AppSettings["istest"] + "" == "1")
            {
                msg = "";
                //省上上报apikey
                string testApiKey = ConfigurationManager.AppSettings["TESTAPIKEY"];
                string result = "";
                //toubiaoSoapClient 通过服务引用得到的类
                Type type = typeof(TestScToubiao.toubiaoSoapClient);
                //获取该类下的指定的公共方法
                MethodInfo method = type.GetMethod(dataType.ToString());
                using (TestScToubiao.toubiaoSoapClient toubiao = new TestScToubiao.toubiaoSoapClient())
                {                    //调用相应的上报方法
                    result = (string)method.Invoke(toubiao, new object[] { testApiKey, xmlString });
                }

                XmlDocument docResult = new XmlDocument();
                docResult.LoadXml(result);
                int isOk = int.Parse(docResult.SelectSingleNode("/Result/Status").InnerText);
                if (isOk == 1)
                    return true;
                else
                {
                    msg = docResult.SelectSingleNode("/Result/Details").InnerText;
                    string emailflag = ",";            //判断返回的数据是否包含某些字符或字符串
                    if ((Regex.Matches(msg, emailflag).Count == 1 || Regex.Matches(msg, ",").Count == 1) && msg.IndexOf("数据库中未查询到相关信息") > 0)
                    {
                        msg = "";
                        return true;
                    }
                    else
                        return false;
                }
            }
            else
            {
                msg = "";
                return true;
            }
        }

fileds、XTYPE详情见于:https://www.cnblogs.com/lovable/p/9186459.html这篇文章

原文地址:https://www.cnblogs.com/lovable/p/9186316.html

时间: 2024-10-12 23:31:11

xml文件数据上报——根据模型生成对应的xml文件进行上报的相关文章

WebService,ASMX文件使用XML格式数据传递参数、验证与获取XML格式返回值的一种方式

1:首先WebService方法定义,每个方法定义两个参数,一个用于验证权限,string格式的XML文本用于传输数据.最终目的实现,WebService方法,验证权限,获取XML数据,处理之后返回XML数据.一下面一段代码为例进行说明: [WebMethodAttribute(Description = "新增督学计划")] public string InspectorPlan_Add(string Token, string XMLParas) { try { //安全凭证检查

FileInputStream 读取文件数据的输入字节流

1 package com.inputstream; 2 3 /* 4 File类: 用于描述一个文件或者文件夹的. 5 6 通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要使用IO流技术. 7 8 IO流(Input Output) 9 10 IO流解决问题: 解决设备与设备之间的数据传输问题. 内存--->硬盘 硬盘--->内存 11 IO流技术: 12 IO流分类: 13 如果是按照数据的流向划分: 14 输入流 15 输出流 16 如果

MyBatis 逆向工程——根据数据表自动生成model、xml映射文件、mapper接口

MyBatis Generator(MBG)的使用 MBG可以根据数据表生成对应的model.xml映射文件.mapper接口,只是简单的生成,还需要根据需求修改. 1.下载jar包 https://github.com/mybatis/generator/releases 解压后有3个jar包,只使用一个: 2.新建一个新的java项目,导入mybatis.jar.mybatis-generator-core.jar.数据库驱动. 3.src下新建config.xml http://mybat

Android 存储文件方式之一---SharedPreferences 内容提供者,以xml 的方式进行数据 存储。是一种轻量级的文件数据存储

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 //UI界面的布局 文件<br><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"

所经历的大文件数据导出(后台执行,自动生成)

所经历的大文件数据导出(后台执行,自动生成) http://www.cnblogs.com/fanfan259/p/4710019.html 阅读目录 一.前言 二.生成excel文件 三.让程序在后台执行 四.显示文件生成进度 五.下载文件 六.上线后出现的问题 七.相应的后续优化 八.后记 一.前言 记录一下以前做的后台excel格式导出统计信息的功能,也是最近同事问到了相关东西,一时之间竟忘了具体的细节,因此记录一下: 大家知道,excel导出数据的功能,后台几乎是必须功能,一般都是点击后

根据数据中的表生成实体和mapper接口及映射文件

1.创建一个Java工程,工程结构为 2.需要的jar包 链接:http://pan.baidu.com/s/1gd2jNDh 密码:pyux 3.GeneratorSqlmap public class GeneratorSqlmap { public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; File

通过mybatis工具generatorConfig.xml自动生成实体,DAO,映射文件

简介 Mybatis属于半自动ORM,可以利用mybatis工具generatorConfig.xml自动生成DAO.实体.映射文件的方式来代替手动书写的方式,这样既提高了工作效率也可以在项目避免出现的一些细微难调试的BUG. 前提条件: 1.需要准备的第三方jar包为: mybatis-generator-core-1.3.2.jar和mysql-connector-java-5.1.39-bin.jar, 其中mybatis-generator-core-1.3.2.jar的下载地址为: h

JavaScript控制XML文件数据

1.提供好 XML文件的数据源: <?xml version="1.0" encoding="UTF-8"?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</

VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案

VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案   第七城市th7cn 今天在VS2010 sp1+sql server 2008 R2+Win7操作系统下测试ADO.NET 实体数据模型时 ,遇到这样一个问题. 首先建好实体模型,然后"根据模型生成数据库",也就是根据实体数据模型生成相应表结构,创建好连接字符串,在弹出的如图窗口后,点击“完成”按钮,程序会自动生成后缀为edmx.sql的文件,但是当打开这个文件时,vs2010出现无响应的情况,