一、实体类生成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文档的更多相关文章

  1. C# T4 模板 数据库实体类生成模板(带注释,娱乐用)

     说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程    1.htt ...

  2. 使用hibernate利用实体类生成表和利用表生成实体类

    1,配置数据库,这里以oracle数据库为例.点击右侧Database图标:

  3. [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码

    前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...

  4. EF:根据实体类生成表结构SQL

    根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...

  5. Jpa实体类生成图解

    Jpa实体类生成图解   创建连接     创建项目  

  6. 【干货分享】C# 实体类生成工具

    前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...

  7. 通过实体类生成建表SQL语句实现方法

    import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.ut ...

  8. poi 读取使用 Strict Open XML 保存的 excel 文档

    poi 读取使用 Strict Open XML 保存的 excel 文档 某项目有一个功能需要读取 excel 报表内容,使用poi读取时报错: 具体错误为: org.apache.poi.POIX ...

  9. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.

随机推荐

  1. html5、css3及响应式设计入门

    一.响应式设计的定义 将三种已有的开发技巧(弹性网格布局.弹性图片.媒体和媒体查询)整合起来,命名为响应式网页设计.真正的响应式设计方法不仅仅只是根据视口大小改变网页布局.相反,它是要从整体上颠覆我们 ...

  2. Core Data使用之一(Swift): 保存

    Core Data 用于永久化数据,它是基于SQLite数据库的保存一门技术. 那么,在Swift中,它是如何实现的呢? 首先,需要新建一个模板,打开工程中的xcdatamodeld文件,点击“Add ...

  3. "SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名"转

     "SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名" 2014-06-12 12:01:10 最近在学习SQL SERVER的高级复制技术的时候 ...

  4. 扩展BaseAdapter实现不存储列表项的ListView

    下面的实例将会通过扩展BaseAdapter来实现Adapter,扩展BaseAdapter可以取得对Adapter最大的控制权:程序要创建多个列表项,每个列表项的组件都由开发者来决定. 下面的布局文 ...

  5. JavaWeb学习篇之----HTTP协议详解

    简介: HTTP是hypertexttransfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程. HTTP协 ...

  6. C# winform DatagridView 的简单操作

    数据显示操作: dgBill.Columns[0].DataPropertyName = "key1"; dgBill.Columns[1].DataPropertyName = ...

  7. Servlet 获取IllegelStateException

    Servlet 获取IllegelStateException: response提交之后,进行requestDispatcher.forwar(),会产生这样的问题: 但是必须是outputStre ...

  8. Spring IO Platform简介及示例

    什么是Spring IO Platform Spring IO Platform,简单的可以认为是一个依赖维护平台,该平台将相关依赖汇聚到一起,针对每个依赖,都提供了一个版本号: 这些版本对应的依赖都 ...

  9. 实现过程全纪录——自己写一个“微信朋友圈”(包括移动端与PC端)

    一.朋友圈的基本单元--动态 首先定义一个自定义控件用来显示每条动态. 二.运行效果 三.核心解读 PushedMessage 有个PushIndex属性,表示发送消息的index,从0开始递增.每个 ...

  10. We Chall-Training: LSB-Writeup

    MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...