一、实体类生成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. CNTV视频回看下载地址

    这其实不是新方法了,这个方法早在五六年前大家就在用,至今也没失效.但是五六年前那时候这个方法可以下载到过去三个月内CNTV直播过的视频,而现在只能下到一个星期的.之所以要下载回看版本,是因为比栏目版本 ...

  2. 让php Session 存入 redis 配置方法

    首先要做的就是安装redis 安装方法:http://redis.io/download Installation Download, extract and compile Redis with: ...

  3. 文本切换器(TextSwitcher)的功能和用法

    TextSwitcher继承了ViewSwitcher,因此它具有与ViewSwitcher相同的特征:可以在切换View组件的同时使用动画效果.与ImageSwitcher相似的是,使用TextSw ...

  4. JSP/Servlet(一)

    JSP/Servlet(一)   Web应用和web.xml文件: 一.构建Web应用: 1.在任意目录下创建一个文件夹. 2.在第1步所建的文件夹内建一个WEB-INF文件夹(注意大小写). 3.进 ...

  5. JSP EL表达式忽略方法

    JSP EL表达式忽略方法: web.xml中,和jsp中:jsp中的等级要高一些: web.xml: <?xml version="1.0" encoding=" ...

  6. Bootstrap 导航 标题栏

    Bootstrap 导航 标题栏: <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  7. Cocos2d-x 详解坐标系统

    这篇博文将介绍一下在cocos2dx中的一些坐标系统概念: 一. (1) OpenGL坐标系 Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系.该坐标系原点在 ...

  8. Canvas scale- 缩放

    可以进行坐标缩放,设为负值可以翻转图片: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  9. ASP.NET Zero--13.一个例子(6)商品分类管理-删除分类

    1.添加按钮 首先添加一个删除按钮,打开文件Index.js[..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\Category\Index.j ...

  10. Linux笔记(十) - 权限管理

    (1)ACL权限1.查看分区ACL权限是否开启:dumpe2fs -h /dev/sda3-h 仅显示超级块中信息,而不显示磁盘块组的详细信息2.临时开启分区ACL权限:mount -o remoun ...