目录

XSD File Generate Class File Simply. 1

Why use XSD file to create C# classes?... 2

How to convert XML file to XSD file?. 2

How to create C# file by XSD file?. 4

What is xsd command params?. 8

Reference. 11

Why use XSD file to create C# classes?

当应用场景是这样的:

1.    需要定义大量的自定义格式的XML协议,供通讯双方使用,本文基于内部接口测试工具的测试协议格式。

2.    减少中间依赖关系,类依赖于XML协议的格式,而非用CS文件序列化XML文件。

How to convert XML file to XSD file?

准备一个支持W3C标准的XML文件(必须有文件头<?xml version="1.0" encoding="utf-8"?>)

<?xml version="1.0" encoding="utf-8" ?>

<protobuftest>

         <head>

                   <version>1.0.0</version>

                   <description>Bocode protobuf test protocol</description>

         </head>

         <transaction>

                   <name>Transaction 01</name>

                   <items>

                            <item>

                                     <name>Functional Test 01</name>

                                     <description>Test protobuf demo</description> 

                                     <testinput>

                                               <code>4002</code>

                                     </testinput>

                                     <testparams> 

                                               <usepretest>false</usepretest>

                                               <keystring>

                                                        <key>10005</key>

                                                        <value>100</value>

                                                        <pindex>0</pindex>

                                               </keystring>

                                               <keybytes>

                                                        <key>10007</key>

                                                        <value>12jkjk123jk12312k312k3k1221k3jk21123213k3k13k1</value>

                                                        <pindex>0</pindex>

                                               </keybytes>

                                               <keylist>

                                                        <keystring>

                                                                 <key>30002</key>                   

                                                                 <value>0</value>

                                                                 <pindex>0</pindex>

                                                        </keystring>

                                                        <keystring>

                                                                 <key>30002</key>

                                                                 <value>10</value>

                                                                 <pindex>0</pindex>

                                                        </keystring>

                                                        <keystring>

                                                                 <key>30002</key>

                                                                 <value>10</value>

                                                                 <pindex>0</pindex>

                                                        </keystring>

                                               </keylist>

                                               </testparams>

                                     <testoutput>

                                               <resultcode>0</resultcode> 

                                     </testoutput>

                            </item> 

                            <item>

                                     <name>Functional Test 02</name>

                                     <description>Test protobuf demo</description>

                                     <testinput>

                                               <code >4002</code>

                                     </testinput>

                                     <testparams> 

                                               <keystring>

                                                        <key>10005</key>

                                                        <value>100</value>

                                               </keystring>

                                               <keybytes>

                                                        <key>10007</key>

                                                        <value>12jkjk123jk12312k312k3k1221k3jk21123213k3k13k1</value>

                                               </keybytes>

                                               <keylist>

                                                        <keystring>

                                                                 <key>30002</key>

                                                                 <value>0</value>

                                                        </keystring>

                                                        <keystring>

                                                                 <key>30002</key>

                                                                 <value>10</value>

                                                        </keystring>

                                                        <keystring>

                                                                 <key>30002</key>

                                                                 <value>10</value>

                                                        </keystring>

                                               </keylist>

                                     </testparams>

                                     <testoutput>

                                               <resultcode>0</resultcode> 

                                     </testoutput>

                            </item> 

                   </items>

         </transaction>

</protobuftest>

以文件方式保存在XXX路径下,并启动VS2012 ARM Cross Tools Command Prompt

之后在XXX目录下即生成ProtobufTest_Demo.xsd文件

How to create C# file by XSD file?

首先准备一个xsd文件,保存在XXX路径,命名为ProtobufTest_Demo.xsd

<?xml version="1.0" encoding="utf-8"?>

<xs:schema id="protobuftest" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

  <xs:element name="keystring">

    <xs:complexType>

      <xs:sequence>

        <xs:element name="key" type="xs:string" minOccurs="0" />

        <xs:element name="value" type="xs:string" minOccurs="0" />

        <xs:element name="pindex" type="xs:string" minOccurs="0" />

      </xs:sequence>

    </xs:complexType>

  </xs:element>

  <xs:element name="protobuftest" msdata:IsDataSet="true" msdata:Locale="en-US">

    <xs:complexType>

      <xs:choice minOccurs="0" maxOccurs="unbounded">

        <xs:element ref="keystring" />

        <xs:element name="head">

          <xs:complexType>

            <xs:sequence>

              <xs:element name="version" type="xs:string" minOccurs="0" />

              <xs:element name="description" type="xs:string" minOccurs="0" />

            </xs:sequence>

          </xs:complexType>

        </xs:element>

        <xs:element name="transaction">

          <xs:complexType>

            <xs:sequence>

              <xs:element name="name" type="xs:string" minOccurs="0" />

              <xs:element name="items" minOccurs="0" maxOccurs="unbounded">

                <xs:complexType>

                  <xs:sequence>

                    <xs:element name="item" minOccurs="0" maxOccurs="unbounded">

                      <xs:complexType>

                        <xs:sequence>

                          <xs:element name="name" type="xs:string" minOccurs="0" />

                          <xs:element name="description" type="xs:string" minOccurs="0" />

                          <xs:element name="testinput" minOccurs="0" maxOccurs="unbounded">

                            <xs:complexType>

                              <xs:sequence>

                                <xs:element name="code" type="xs:string" minOccurs="0" />

                              </xs:sequence>

                            </xs:complexType>

                          </xs:element>

                          <xs:element name="testparams" minOccurs="0" maxOccurs="unbounded">

                            <xs:complexType>

                              <xs:sequence>

                                <xs:element name="usepretest" type="xs:string" minOccurs="0" />

                                <xs:element ref="keystring" minOccurs="0" maxOccurs="unbounded" />

                                <xs:element name="keybytes" minOccurs="0" maxOccurs="unbounded">

                                  <xs:complexType>

                                    <xs:sequence>

                                      <xs:element name="key" type="xs:string" minOccurs="0" />

                                      <xs:element name="value" type="xs:string" minOccurs="0" />

                                      <xs:element name="pindex" type="xs:string" minOccurs="0" />

                                    </xs:sequence>

                                  </xs:complexType>

                                </xs:element>

                                <xs:element name="keylist" minOccurs="0" maxOccurs="unbounded">

                                  <xs:complexType>

                                    <xs:sequence>

                                      <xs:element ref="keystring" minOccurs="0" maxOccurs="unbounded" />

                                    </xs:sequence>

                                  </xs:complexType>

                                </xs:element>

                              </xs:sequence>

                            </xs:complexType>

                          </xs:element>

                          <xs:element name="testoutput" minOccurs="0" maxOccurs="unbounded">

                            <xs:complexType>

                              <xs:sequence>

                                <xs:element name="resultcode" type="xs:string" minOccurs="0" />

                              </xs:sequence>

                            </xs:complexType>

                          </xs:element>

                        </xs:sequence>

                      </xs:complexType>

                    </xs:element>

                  </xs:sequence>

                </xs:complexType>

              </xs:element>

            </xs:sequence>

          </xs:complexType>

        </xs:element>

      </xs:choice>

    </xs:complexType>

  </xs:element>

</xs:schema>

然后打开VS2012 Command Prompt(开始---所有程序---Microsoft Visual Studio 2012---Visual Studio Tools---VS2012 ARM Cross Tools Command Prompt)

(文中TestXSD为ProtobufTest_Demo.xsd路径, /classes为输出类型, /language:CS为输出语言)

打开 ProtobufTest_Demo.cs文件:

What is xsd command params?

C:\TestXSD>xsd /?

Microsoft (R) Xml Schemas/DataTypes support utility

[Microsoft (R) .NET Framework, Version 4.0.30319.17929]

Copyright (C) Microsoft Corporation. All rights reserved.

xsd.exe -

    Utility to generate schema or class files from given source.

xsd.exe <schema>.xsd /classes|dataset [/e:] [/l:] [/n:] [/o:] [/s] [/uri:]

xsd.exe <assembly>.dll|.exe [/outputdir:] [/type: [...]]

xsd.exe <instance>.xml [/outputdir:]

xsd.exe <schema>.xdr [/outputdir:]

     - OPTIONS -

/classes

    Generate classes for this schema. Short form is '/c'.

/dataset

    Generate sub-classed DataSet for this schema. Short form is '/d'.

/enableLinqDataSet

    Generate LINQ-enabled sub-classed Dataset for the schemas provided.  Short f

orm is '/eld'.

/element:<element>

    Element from schema to process. Short form is '/e:'.

/fields

    Generate fields instead of properties. Short form is '/f'.

/order

    Generate explicit order identifiers on all particle members.

/enableDataBinding

    Implement INotifyPropertyChanged interface on all generated types

    to enable data binding. Short form is '/edb'.

/language:<language>

    The language to use for the generated code. Choose from 'CS', 'VB', 'JS',

    'VJS', 'CPP' or provide a fully-qualified name for a class implementing

    System.CodeDom.Compiler.CodeDomProvider. The default language

    is 'CS' (CSharp). Short form is '/l:'.

/namespace:<namespace>

    The namespace for generated class files. The default namespace

    is the global namespace. Short form is '/n:'.

/nologo

    Suppresses the banner.

/out:<directoryName>

    The output directory to create files in. The default

    is the current directory. Short form is '/o:'.

/type:<type>

    Type from assembly to generate schema for. Multiple types may be provided.

    If no types are provided, then schemas for all types in an assembly

    are generated. Short form is '/t:'.

/uri:<uri>

    Uri of elements from schema to process. Short form is '/u:'.

     - ADVANCED -

/parameters:<file>

    Read command-line options from the specified xml file. Short form is '/p:'.

     - ARGUMENTS -

<schema>.xsd       Name of a schema containing elements to import.

<assembly>.dll|exe Name of an assembly containing types to generate schema for.

<instance>.xml     Name of an xml file to infer xsd schema from.

<schema>.xdr       Name of an xdr schema to convert to xsd.

Multiple file arguments of the same type may be provided.

Reference

http://msdn.microsoft.com/zh-cn/library/x6c1kb0s(VS.80).aspx.

如何引用XML文件生成C#类的更多相关文章

  1. 根据XML文件 生成 java类

    最近一直在做关于webservice 的项目,这种项目最麻烦的就是根据对方的要求产生XML,文档里面虽然有XML结构,但是要转化为java里面的实体实在费劲, 有个自动化的工具就好了,半自动化也好,省 ...

  2. WebAPI使用多个xml文件生成帮助文档

    一.前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的xm ...

  3. WebAPI使用多个xml文件生成帮助文档(转)

    http://www.cnblogs.com/idoudou/p/xmldocumentation-for-web-api-include-documentation-from-beyond-the- ...

  4. 【转】WebAPI使用多个xml文件生成帮助文档

    来自:http://www.it165.net/pro/html/201505/42504.html 一.前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet ...

  5. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  6. C#读取XML文件的基类实现

    刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...

  7. XML文件与实体类的互相转换

    XML文件与实体类的互相转换 一.将XML文件反序列化为实体类对象 1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config).但是现在为了演示XML ...

  8. XML文件生成C++代码(基于rapidxml)

    简述 与XML文件生成C++代码(基于pugixml)中的功能一致,只是这里改用的rapidxml来实现.就不多说了,直接放代码. 代码 #include "rapidxml-1.13/ra ...

  9. XML文件生成C++代码(基于pugixml)

    简述 在一个项目中需要用到XML的解析和生成,知乎上有人推荐rapidxml和pugixml等库.RapidXML一看库还比较大,就先研究一下pugixml了. 因为对解析XML的需求不大(都是一些很 ...

随机推荐

  1. Android Studio调试功能使用总结【转】

    Android Studio调试功能使用总结[转]   这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...

  2. 调用手机话费充值API的SDK编写思路

    思路 通过将SDK方法中返回的数据划分为正常返回数据以及错误返回的数据两部分,让调用者更简单的对接口调用错误进行处理. 将SDK调用第三方服务接口的流程划分为: 数据准备,http请求,结果处理三部分 ...

  3. java 字节流和字符流的区别 转载

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...

  4. Elastic search入门

    首先是下载elasticsearch https://www.elastic.co/downloads,解压: 然后下载了中文分析器ik,github上搜索elasticsearch-ik就能找到,h ...

  5. 边工作边刷题:70天一遍leetcode: day 86-1

    Find Median from Data Stream 要点: 基本框架:两个heap:large,small把所有数二分.一个新的element.目标:维持heap中的元素个数相同.错误理解:新元 ...

  6. UESTC 876 爱管闲事 --DP

    题意:即求给定n个数字(a1,a2,……an),不改变序列,分成M份,使每一份和的乘积最大. 思路:dp[i][j]表示把前i个数字,分成j份所能得到的最大乘积. 转移方程:dp[i][j] = ma ...

  7. HDU 2082 找单词 --生成函数

    跟上题是一个思路:http://www.cnblogs.com/whatbeg/p/3728545.html 只不过是上一题的扩展. 代码: #include <iostream> #in ...

  8. Android代码优化----PullToRefresh+universal-image-loader实现从网络获取数据并刷新

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. NGUI3.x Button事件

    代码调用事件 UI搭建 1.首先创建一个Button,和一个的GameObeject命名为GUIClikEvent 2.方法一:创建一个NGUIClickTest.cs,绑定在Button上 Clic ...

  10. NGUI学习笔记汇总

    NGUI学习笔记汇总,适用于NGUI2.x,NGUI3.x 一.NGUI的直接用法 1. Attach a Collider:表示为NGUI的某些物体添加碰撞器,如果界面是用NGUI做的,只能这样添加 ...