一、实体类生成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. java_web学习(2)Servlet

    软件编程体系 B\S 系统架构与C\S 系统结构 Web服务器         HTTP 协议:Web 浏览器与 web 服务器的交互所遵循的规则.         Web 服务器:Web服务器可以解 ...

  2. 勘误《iOS网络高级编程:iPhone和iPad的企业应用开发》

    VII页 , 倒数第二行, “其他” 应为 “其它” X页, 源代码有错误,说是有19章,实际一共13章 XI页,勘误表的链接也是错误的  .是该书的<Beginning ASP.NET 4.5 ...

  3. 【BZOJ1552】[Cerc2007]robotic sort Splay

    [BZOJ1552][Cerc2007]robotic sort Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N ...

  4. Delphi TRect函数例子

    {   在网上看到个这个例子感觉还不错,将它移到自己的博客里没事的时候看看:   TRect    作用:保存一个矩形的左上角和右下角的坐标值:      声明:       type TRect = ...

  5. php 分词

    发现了一个很好的分词类库phpanalysis2.0. 原文连接地址:http://www.phpbone.com/phpanalysis/         分 词系统简介:PHPAnalysis分词 ...

  6. swift 中使用OC第三方库(以AFNetworking为例)

    首先呢  把你需要的第三方库导入到你的项目中来  具体怎么导入 这不是这篇的重点  看上一篇 废话不多  直接上 (1)在项目中直接建一个 oc 的控制器  然后xcode会提醒你  要不要建造桥接文 ...

  7. html中object标签详解

        定义和用法 object标签定义一个嵌入的对象.请使用此元素向您的 XHTML 页面添加多媒体.此元素允许您规定插入 HTML 文档中的对象的数据和参数,以及可用来显示和操作数据的代码. &l ...

  8. Unity基础学习-Unity概述

    Unity 概述 Unity是一个强大的引擎,里面包括大量的工具用来满足各种各样的需求.Unity的编辑器是直观的可定制的,让您在您的工作流中有较大的自由度. 本小节是开始学习Unity的关键部分.里 ...

  9. window.open a.href打开窗口referer的问题

    window.open a.href打开窗口referer的问题: JSP: <%@ page language="java" import="java.util. ...

  10. 初识JSON

    ▓▓▓▓▓▓ 大致介绍 JSON(JavaScript Object Notation  JavaScript对象表示法),JSON是一种数据格式,不是一种编程语言.虽然它的名字中有JavaScrip ...