zoukankan      html  css  js  c++  java
  • 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种生成都是用实体集批量生成,单个实体就不用演示了吧。

  • 相关阅读:
    简单的描述Java中的构造函数,及访问修饰符
    MyEclipse中常用的快捷键大全,快来.....
    转:攻击JavaWeb应用[1]-javaEE基础
    转:vscode中调试php
    转:java-Servlet开发
    转:Spring学习笔记---Spring Security登录页
    实战栈溢出:三个漏洞搞定一台路由器(转自长亭科技)
    gdbserver静态编译
    gdb调试若干问题
    转:Apache+Fastcgi+Django
  • 原文地址:https://www.cnblogs.com/super-super/p/6490689.html
Copyright © 2011-2022 走看看