有些时候我们在拼装XML的过程中,因为各种拼接会感到非常的麻烦(定义变量模型,自动生成,使用XElement再去组装),我的脑袋感觉都大了,能不能有个稍微比较快捷自动随变量自动生成XML格式的方式,看了网上大牛们的方式,还是老传统,不过代码很健壮耐用,我闲着没事也自己尝试能不能尽量在简化。

1:解析XML

解析的方式方法很多,但是我比较喜欢简单模式,通过系统缓存流进行读写操作(例如以下解析后存放到数据集Dataset中)

//系统内存提供流式的读写操作
var memoryStreams = new MemoryStream();

具体看以下方法(将数据带出后直接存到Dataset中)

//测试用例解析XML公共方法存放至Datatset数据集
public DataSet StringXml(string TestXml)
{
//系统内存提供流式的读写操作
var memoryStreams = new MemoryStream();
//注意格式化字符集
var buffer = Encoding.UTF8.GetBytes(TestXml);
memoryStreams.Write(buffer, 0, buffer.Length);
//设置讲readXml从0开始,不然错误提示XML缺少根元素
memoryStreams.Position = 0;
memoryStreams.Seek(0, SeekOrigin.Begin);
DataSet dsXml = new DataSet();
//将解析出来数组数据放进数据集并返回该数据集
dsXml.ReadXml(memoryStreams);
return dsXml;
}

2:组装XML

下面是我本地测试写的简单示例

 public string GetXmlinfo()
{
DataSet dsXml = new DataSet();
dsXml = commonws.GetDsSql("个人中心", "根据证件ID查询信息");
string[] arryList = { "result" };
string result = docHelper.CreatXmlTree(arryList, dsXml);
string state = "0";
string stateMessage = "交易成功";
#region XML组装(详细参数result节点)
StringBuilder returnXml = new StringBuilder();
returnXml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
returnXml.Append("<response>");
returnXml.Append("<resultCode>" + state + "</resultCode>");
returnXml.Append("<resultMessage>" + stateMessage + "</resultMessage>");
returnXml.Append(result);
returnXml.Append("</response>");
#endregion
return Getxml(returnXml.ToString());
}

以上代码除了固定的xml头,我们所拼接的其实是result内容节点,其他都是固定值,以及写死的固定参数值

其中:

CreatXmlTree是本次组装节点的重点
result是本次传入的节点名称,实际根据XML要求名称即可
string[] arryList = { "result" };
string result = docHelper.CreatXmlTree(arryList, dsXml);
CreatXmlTree组装方法展示如下:
/// <summary>
/// </summary>
/// <param name="Xmlparam">内容节点分支名称(以组的形式展示节点名称)</param>
/// <param name="dsDataXml">数据集Dataset形式打开</param>
/// <returns></returns>
public string CreatXmlTree(object[] Xmlparam, DataSet dsDataXml)
{
DataTable dt = dsDataXml.Tables[0];//获取到表
string xmlt1 = Xmlparam[0].ToString();//外节点0 result 获取到节点内容名称
string Temo = string.Empty;
string xmlAdd = string.Empty;
XElement XEle = new XElement("XML");//实例化定义中必须要有值,后面可根据自己变量的传参为准
for (int j = 0; j < dsDataXml.Tables[0].Rows.Count; j++)//循环获取到数据行(与列名一一对应)
{
XEle = new XElement(xmlt1);//拼接节点元素开始
for (int i = 0; i < dsDataXml.Tables[0].Columns.Count; i++)//循环获取内容字段的列名
{
string strRows = string.Empty;//测试
string strColumns = dsDataXml.Tables[0].Columns[i].ToString();//测试
try
{
strRows = dsDataXml.Tables[0].Rows[j][i].ToString(); //遍历后同时获取列名 + 每行首字段依次开始的值
}
catch (Exception ex)
{ }
XEle.Add(
new XElement(strColumns, strRows)//组装XML
);
}
xmlAdd += XEle.ToString();
} return xmlAdd.ToString();
}

返回生成的XML节点展示(如下)

<?xml version="1.0" encoding="utf-8"?>
<response>
<resultCode>0</resultCode>
<resultMessage>交易成功</resultMessage>
<result>
<patId>0000026723</patId>
<patType></patType>
<patName>曾金培</patName>
<patSex>男</patSex>
<patBirth>19550717</patBirth>
<patAddress>和平</patAddress>
<patMobile>18776580849</patMobile>
<patCardType>居民身份证</patCardType>
<patCardNo>000002672320200924</patCardNo>
<admissionNo></admissionNo>
</result>
</response>

到此结束,再也不想再去拼装模型,一个个在拼装起来!大家可以尝试下,我会把源码分享出来,有什么不足的可供大家参考修改。

XML节点自动生成简单实例的更多相关文章

  1. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  2. mybatis generator.xml 配置 自动生成model,dao,mapping

    generator.xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gener ...

  3. Matlab中使用脚本和xml文件自动生成bus模块

    帮一个老师写的小工具 在一个大工程中需要很多bus来组织信号,而为了规范接口,需要定义很多BusObject,用Matlab语言手写这些BusObject比较费工夫 所以用xml配置文件来写,也便于更 ...

  4. XML之自动生成类,添加,修改,删除类的属性

    1. class ClassHelperDemo { public static void Main() { #region 演示一:动态生成类. //生成一个类t. Type t = ClassHe ...

  5. 根据xml文件自动生成xsd文件

    根据xml生成xsd文档 1. 找到vs自带的xsd.exe工具所在的文件夹位置: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 注意 ...

  6. MyBatis-使用XML或注解的简单实例

    一.导入jar包 <dependency> <groupId>junit</groupId> <artifactId>junit</artifac ...

  7. 自动生成简单四则运算的C语言程序

    该程序是在博客园里面找的,具体是谁的找了半天没找到,无法提供它原本的链接.由于自己写的过于简单,且有一些功能暂时无法实现,所以就找了一个来应付作业,望原谅.在这个程序的源码中我改了一个错误的地方,源码 ...

  8. 项目转移时发生的错误<springboot+mybatis(xml逆向工程自动生成)>

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'app ...

  9. (二十二)SpringBoot之使用mybatis generator自动生成bean、mapper、mapper xml

    一.下载mybatis generator插件 二.生成generatorConfig.xml new一个generatorConfig.xml 三.修改generatorConfig.xml 里面的 ...

随机推荐

  1. 2020重新出发,NOSQL,Redis主从复制

    Redis主从复制 尽管 Redis 的性能很好,但是有时候依旧满足不了应用的需要,比如过多的用户进入主页,导致 Redis 被频繁访问,此时就存在大量的读操作. 对于一些热门网站的某个时刻(比如促销 ...

  2. mysql排序的问题与获取第几高的分数的信息

    1:先截图看效果 2:完整的SQl语句 SELECT * FROM studentscore; -- ------------------ SET @maxscore=(SELECT MAX(scor ...

  3. [bash]调用linux命令获得结果存入变量的两种方式

    代码: #!/bin/bash ls=$(ls) echo $ls whoami=`whoami` echo $whoami 执行结果: [os-××××××××101z ~]$ sh cmd2.sh ...

  4. jQuery的那些事儿

    jQuery概述 j-JavaScript+Query就是查询js的库,把js中的DOM操作做了封装,实现快速查询使用其中的功能. 优化了DOM操作.事件处理.动画设计和Ajax交互 学习jQuery ...

  5. VUE常用问题hack修改

    vue-router router这里踩的坑主要是组件的重用.构建单页面大型应用的话,肯定要开启组件的缓存的,因为一般会要求后退的时候不要重新加载页面,而且要记住原始的滚动位置.首先,引入router ...

  6. 浅谈DOM事件的优化

    在 JavaScript 程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 Firefox 中,滚 ...

  7. Mybatis动态SQL配置

    使用 if where foreach标签对映射配置文件中sql语句进行动态配置 1.首先在dao接口中设置两个查询方法 package sun.dao; import sun.domain.Quer ...

  8. Salesforce LWC学习(二十五) Jest Test

    本篇参看: https://trailhead.salesforce.com/content/learn/modules/test-lightning-web-components https://j ...

  9. VSCode注册关联自定义类型文件

    打开你要注册的文件类型文件[本文中用 ".txt"到".lua"演示] 在VSCode窗口右下角有当前文件类型"Plain Text" 是可 ...

  10. Minimizing maximizer(POJ 1769)

    原题如下: Minimizing maximizer Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 5104   Accep ...