C#实体类生成XML与XML Schema文档

一、实体类生成XML

 1 private void CreateXML()
 2         {
 3             Type[] objType = DBEntityRegst();
 4             foreach (var item in objType)
 5             {
 6                 if (item == null)
 7                 {
 8                     break;
 9                 }
10
11                 XmlDocument doc = new XmlDocument();
12
13                 //<?xml version="1.0"?>
14                 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "", "");
15                 doc.AppendChild(dec);
16
17                 //创建一个根节点
18                 //<schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
19                 XmlElement root = doc.CreateElement("schema");
20                 root.SetAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema");
21                 doc.AppendChild(root);
22
23                 //<element Name="DTO_BatchTotal">
24                 XmlElement element1 = doc.CreateElement("element");
25                 element1.SetAttribute("Name", (item.Name).ToString());
26
27                 //<complexType>
28                 XmlElement element2 = doc.CreateElement("complexType");
29
30                 //<sequence>
31                 XmlElement element3 = doc.CreateElement("sequence");
32
33
34                 System.Reflection.PropertyInfo[] ps = item.GetProperties();
35                 for (int i = 0; i < ps.Length; i++)
36                 {
37                     string typeold = (ps[i].PropertyType).ToString();
38                     string[] a = typeold.Split(‘.‘);
39                     string typenew = ("xs:" + a[1]).ToLower();
40
41                     //<element Name="batch" Type="xs:string" />
42                     //<element Name="total" Type="xs:decimal" />
43                     XmlElement element4 = doc.CreateElement("element");
44                     element4.SetAttribute("Name", ps[i].Name);
45                     element4.SetAttribute("Type", typenew);
46
47                     //给element3添加子节点
48                     element3.AppendChild(element4);
49                 }
50                 //同上
51                 element1.AppendChild(element2);
52                 element2.AppendChild(element3);
53                 root.AppendChild(element1);
54
55                 XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
56                 xsn.Add("xs", "http://www.w3.org/2001/XMLSchema");
57                 doc.Save(@"E:\XML\" + item.Name.ToString() + ".xml");
58
59
60             }
61         }
62
63         /// <summary>
64         /// 将DTO实体加载到List列表
65         /// </summary>
66         private Type[] DBEntityRegst()
67         {
68
69             List<IEntityRegstHelper> entityRegstHelperlist = null;
70             entityRegstHelperlist = new List<IEntityRegstHelper>();
71             var classes = Assembly.Load("ZxSoftERPGC.Model").GetTypes();//命名空间[Model]下的类类型集
72
73             Type[] a = new Type[classes.Length];
74             int i = 0;
75             foreach (var classtype in classes)
76             {
77
78                 if (((classtype.Name).ToString()).Contains("DTO_")) //指定获取类名包含“DTO_”的类
79                 {
80                     a[i] = classtype;
81                     i++;
82                 }
83             }
84             return a;
85         }

结果如:

<?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 = 0; 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[1]).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种生成都是用实体集批量生成,单个实体就不用演示了吧。

时间: 2024-10-05 05:02:00

C#实体类生成XML与XML Schema文档的相关文章

批量根据实体类生成相关的类

<# // 从实体类生成相关的实体类 #> <#@ template hostspecific="true" language="C#" #> <#@ assembly name="EnvDTE" #> <#@ assembly name="System.Core" #> <#@ assembly name="System.Data" #> <

关于ef core 将实体类生成到类库 , 将appsettings.json生成到debug目录下

将ef  core 实体类生成到 standard 类库里  如图debug下  找不到appsettings.json 配置文件 在csproj中加入 <ItemGroup> <Content Update="appsettings.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup> appset

XML概念,约束文档,解析

day01总结 今日内容 l XML语法 l XML约束之DTD l XML解析器介绍 l XML解析之JAXP( DOM.SAX ) l DOM4J l Schema 一.XML语法 XML概述 1 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记语言)的一个子集. XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的. W3C在1998年2月发布1.0版本: W3C

XML概念,约束文档,解析 笔记

XML的学习: 1.XML简介及语法: 2.XML的约束: DTD Schema 3.XML的解析:(*****重点) XML: What:eXtensible Markup Language(可扩展的标记语言.) <dog></dog> * HTML:超文本标记语言. 标记语言 :都会有一些标签.<html></html> <p></p> Why: * 用来处理大量有关系的数据. Where: * 用来作为软件的配置文件(SSH--

maven 学习---生成基于Maven的项目文档站点

在Maven中,可以使用“mvn site”,为您的项目信息生成文档站点. mvn site 生成的网站是在项目的“target/site”文件夹中. mvn site 示例 请参见通过“mvn site”命令生成的文件列表. 文档页面的样本如下. 想知道自己开发的项目的信息可以试试. 标签:Maven    项目    文档    站点 本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程转载请注明:文章转载自:http://www.yii

20140602-XML之Schema文档学习笔记

20140602-XML之Schema文档学习笔记 一.Schema约束 几个重要知识: 1.namespace 相当于schema文件的id.Namespace是一个概念,并没有这个属性. 2.targetNamespace属性 注意:这个属性只在schema文档中出现.用来指定schema文档的namespace的值. 3.xmlns属性(非常重要,用于引入一个约束) 引入一个约束,它的值是一个schema文档的targetNamespace值(确切地说,是targetNamespace的属

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

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

.NET项目工程生成一份项目帮助文档chm--Sandcastle工具

.NET项目工程生成一份项目帮助文档chm--Sandcastle工具

C#工具类:使用iTextSharp操作PDF文档

iTextSharp是一个用于操作PDF文件的组件DLL程序,在C#程序中可以引用iTextSharp组件,用于开发与PDF文件相关的报表等功能,利用iTextSharp组件提供出来的方法接口,我们可以实现很多与PDF文档有关的操作,如打开PDF文档对象.往PDF文档中添加段落.添加图片链接等等,功能非常的强大.这边简单对iTextSharp类进行了封装,提供一些常用的PDF操作方法. iTextSharp官网:http://www.itextpdf.com/ (英文好的建议直接查看原始文档).