C#实体类生成XML与XML Schema文档
一、实体类生成XML
private void CreateXML()
{
Type[] objType = DBEntityRegst();
foreach (var item in objType)
{
if (item == null)
{
break;
} XmlDocument doc = new XmlDocument(); //<?xml version="1.0"?>
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "", "");
doc.AppendChild(dec); //创建一个根节点
//<schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
XmlElement root = doc.CreateElement("schema");
root.SetAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema");
doc.AppendChild(root); //<element Name="DTO_BatchTotal">
XmlElement element1 = doc.CreateElement("element");
element1.SetAttribute("Name", (item.Name).ToString()); //<complexType>
XmlElement element2 = doc.CreateElement("complexType"); //<sequence>
XmlElement element3 = doc.CreateElement("sequence"); System.Reflection.PropertyInfo[] ps = item.GetProperties();
for (int i = ; i < ps.Length; i++)
{
string typeold = (ps[i].PropertyType).ToString();
string[] a = typeold.Split('.');
string typenew = ("xs:" + a[]).ToLower(); //<element Name="batch" Type="xs:string" />
//<element Name="total" Type="xs:decimal" />
XmlElement element4 = doc.CreateElement("element");
element4.SetAttribute("Name", ps[i].Name);
element4.SetAttribute("Type", typenew); //给element3添加子节点
element3.AppendChild(element4);
}
//同上
element1.AppendChild(element2);
element2.AppendChild(element3);
root.AppendChild(element1); XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
xsn.Add("xs", "http://www.w3.org/2001/XMLSchema");
doc.Save(@"E:\XML\" + item.Name.ToString() + ".xml"); }
} /// <summary>
/// 将DTO实体加载到List列表
/// </summary>
private Type[] DBEntityRegst()
{ List<IEntityRegstHelper> entityRegstHelperlist = null;
entityRegstHelperlist = new List<IEntityRegstHelper>();
var classes = Assembly.Load("ZxSoftERPGC.Model").GetTypes();//命名空间[Model]下的类类型集 Type[] a = new Type[classes.Length];
int i = ;
foreach (var classtype in classes)
{ if (((classtype.Name).ToString()).Contains("DTO_")) //指定获取类名包含“DTO_”的类
{
a[i] = classtype;
i++;
}
}
return a;
}
结果如:
<?xml version="1.0"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<element Name="DTO_BatchTotal">
<complexType>
<sequence>
<element Name="batch" Type="xs:string" />
<element Name="total" Type="xs:decimal" />
</sequence>
</complexType>
</element>
</schema>
参考:http://www.cnblogs.com/xwdreamer/archive/2011/04/27/2297023.html
二、生成XML Schema
private void button1_Click(object sender, EventArgs e)
{
Type[] objType = DBEntityRegst();
foreach (var item in objType)
{
if (item == null)
{
break;
} XmlSchema schema = new XmlSchema(); // <xs:element name="">
XmlSchemaElement elementPets = new XmlSchemaElement();
schema.Items.Add(elementPets);
elementPets.Name = (item.Name).ToString(); // <xs:complexType>
XmlSchemaComplexType complexType = new XmlSchemaComplexType();
elementPets.SchemaType = complexType; //<xs:sequence>
XmlSchemaSequence seqauth = new XmlSchemaSequence();
complexType.Particle = seqauth; System.Reflection.PropertyInfo[] ps = item.GetProperties();
for (int i = ; i < ps.Length; i++)
{
// <xs:element name=""/>
XmlSchemaElement catRef = new XmlSchemaElement();
seqauth.Items.Add(catRef);
catRef.Name = ps[i].Name;
string typeold = (ps[i].PropertyType).ToString();
string[] a = typeold.Split('.');
string typenew = (a[]).ToLower();
//类型格式转换
if (typenew == "int32" || typenew == "int64")
{
typenew = "integer";
}
if (typenew == "datetime")
{
typenew = "date";
}
catRef.SchemaTypeName = new XmlQualifiedName(typenew, "http://www.w3.org/2001/XMLSchema");
} XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(schema);
schemaSet.Compile(); XmlSchema compiledSchema = null; foreach (XmlSchema schema1 in schemaSet.Schemas())
{
compiledSchema = schema1;
}
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema"); //用流的形式输出保存
using (MemoryStream stream = new MemoryStream())
{
compiledSchema.Write(stream, nsmgr);
FileStream fs = new FileStream(@"E:\XML\" + item.Name.ToString() + ".xml", FileMode.Create);
BinaryWriter w = new BinaryWriter(fs);
w.Write(stream.ToArray());
fs.Close();
stream.Close();
} }
}
结果如:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DTO_BatchTotal">
<xs:complexType>
<xs:sequence>
<xs:element name="batch" type="xs:string" />
<xs:element name="total" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
参考:https://msdn.microsoft.com/en-us/library/system.xml.schema.xmlschema(v=vs.110).aspx
2种生成都是用实体集批量生成,单个实体就不用演示了吧。
C#实体类生成XML与XML Schema文档的更多相关文章
- C# T4 模板 数据库实体类生成模板(带注释,娱乐用)
说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程 1.htt ...
- 使用hibernate利用实体类生成表和利用表生成实体类
1,配置数据库,这里以oracle数据库为例.点击右侧Database图标:
- [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- EF:根据实体类生成表结构SQL
根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...
- Jpa实体类生成图解
Jpa实体类生成图解 创建连接 创建项目
- 【干货分享】C# 实体类生成工具
前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...
- 通过实体类生成建表SQL语句实现方法
import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.ut ...
- poi 读取使用 Strict Open XML 保存的 excel 文档
poi 读取使用 Strict Open XML 保存的 excel 文档 某项目有一个功能需要读取 excel 报表内容,使用poi读取时报错: 具体错误为: org.apache.poi.POIX ...
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.
随机推荐
- 5分钟了解MySQL5.7的Online DDL雷区
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1855872 Part ...
- 浅谈JavaWEB入门必备知识之Servlet入门案例详解
工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...
- js原生之设计模式开篇介绍
本文主要讲述一下,什么是设计模式(Design pattern),作为敲键盘的我们要如何学习设计模式.设计模式真的是一把万能钥匙么? 各个代码的设计模式几乎每个人都知晓,就算不会那也一定在一些 ...
- oracle11g手工建库
1.设置环境变量 [oracle@HE3~]$ vi .bash_profile exportPATH exportEDITOR=vi exportORACLE_SID=orcl exportORAC ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- Web浏览器兼容性测试工具如何选择
对于前端开发工程师来说,网页兼容性测试工程师而言,确保代码在各种主流浏览器的各个版本中都能正常工作是件很费时的事情,幸运的是,有很多优秀的工具可以帮助测试浏览器的兼容性,领测软件测试网向您推荐12款很 ...
- Pomelo聊天室框架
聊天室是验证服务器最典型的例子,Pomelo的运行架构: 在这个架构里,前端服务器也就是connector专门负责承载连接, 后端的聊天服务器则是处理具体逻辑的地方. 这样扩展的运行架构具有如下优势: ...
- spring mvc 必须传某个参数的写法
在controller中写 @RequestMapping(中的params="json") @RequestMapping(value = "/{username}&q ...
- 理解FMS中的实例
FMS服务器端安装后,唯一需要注意的是设置端口,默认的访问端口是1935和80,如果服务器上安装了IIS提供 WEB服务,那么需要将80修改为其他端口如8080,否则,IIS将会无法工作.如果愿意,也 ...
- promise/bluebird源码
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/bluebirdsource 本博客同步在http://www.cnb ...