返回首页

{A}
{S0}简介
我开始写这个应用程序,前一段时间,当我在一个项目中涉及的大量使用XML。此应用程序基本上是由微软的XSD工具复制的特点,但与其他一些不错的功能。背景
被写入应用程序的核心功能,充分利用了XML的特点和。NET框架的CodeDOM。有一些选项,可以自动转换XML属性字段/属性的夫妇一样,是非常有用的。此外,您可以告诉解析器使用通用命名空间创建一个儿童,而不是数组的集合。如果你想添加一些功能,我建议的Sytem.CodeDom命名空间中的一些知识。使用代码我只需要在代码文件
如果你只是想使用一种工具,可以帮助你的日常工作​​,应用程序本身就是这么简单,你不需要太多的指令... ...只抓一个XML模式,提供了一个输出路径(默认情况下,它是在同一位置的架构),和文件名。一旦你这样做,你可以选择喜欢的目标语言,而不是标准阵列,一个默认的命名空间,以及其他一些仿制药的使用一些不错的选择。通过这些设置,你是一个点几下获得新鲜的类文件!只要按一下在编译和保存,并就大功告成了。注:所有类产生局部的,允许无类的再生(如果您的模式越来越)困扰的可扩展性。今天,我想我会添加一些东西... ...
相反,如果你想创建自己的UI,或想在其他项目中使用的分析功能,它们都包含在一个单一的静态类称为codeProcessor。这个类的使用非常简单。事实上,如果你想从架构创建一个类文件,你必须调用只有一个方法:

public static CodeNamespace Process(string xsdFile, 

                                             string targetNamespace, 

                                             bool chooseElement, 

                                             string elementName)

所有";密集tasksquot;在这一个方法。特别是,该方法是分为三个区域,一个XML模式解析,生成的CodeDOM之一,CodeDom中创作。
XML模式解析不应该要修改,它只是编译内存中的模式。 "加床featuresquot;如添加注释和默认值处理的CodeDOM生成。如果你想管理的其他功能,我的建议是使用本节来处理XML片段,和创建真正的代码元素的CodeDOM创作部分。例如,管理属性的默认值是这样的:
,其中成员是一个内部变量,用于管理架构编译CodeMember对象。通过这种方式,在CodeDom中创作操作,解析的UserData集合建立正确的代码片段。
CodeDom中创作的CodeDOM对象的形式创建代码片段。如果你从来没有面对这部分的。NET Framework,我的建议是该读一些好的文章和尝试深入内部。在本节中处理所有业务相关的quot;额外featuresquot的,如从数组泛型,包括命名空间,默认值,依此类推。它还增加了一个默认的构造函数(无参数)来执行初始化任务。例如:
foreach(CodeTypeDeclaration defaultV in defaultValueTypes){

    foreach(System.Collections.DictionaryEntry kvp in defaultV.UserData){

    ctor.Statements.Add(new CodeAssignStatement(

        new CodeVariableReferenceExpression(kvp.Key.ToString().Substring(8)),

        new CodeSnippetExpression(kvp.Value.ToString())));

    }

}

在片段上述报道的代码生成的默认值管理。检查所有的类型有默认值,添加默认的构造函数来初始化每个字段的值。如果你是一个新手的CodeDOM命名空间,它可能是一个有点棘手理解的片段。这里是它是如何工作的解释:类型CodeTypeConstructor,构造函数变量,语句的集合,在其中添加了所有的默认分配。这是通过创建一个CodeAssignStatement,一个左边和右边的表达式指定。左边的表达式是字段的名称,和右边的表达式是一个片段(即允许你把里面的CodeDOM对象与XML架构中指定的默认​​值正常的文本)。片段以上的结果应该是这样的:
这是XML模式片段:
...

  <xs:complexType name="ControlProperties" abstract="true">

    <xs:attribute name="Enabled" type="xs:boolean" 

                  use="optional" default="true">

   ...

,这是生成的代码片断:
[System.Xml.Serialization.XmlIncludeAttribute(typeof(GridViewProperties))]

[System.CodeDom.Compiler.GeneratedCodeAttribute("XMLtoClass", "1.0.0.0")]

[System.SerializableAttribute()]

[System.Diagnostics.DebuggerStepThroughAttribute()]

[System.ComponentModel.DesignerCategoryAttribute("code")]

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemaName.xsd")]

[System.Xml.Serialization.XmlRootAttribute(Namespace="http://schemaName.xsd", 

 IsNullable=true)]

public abstract partial class ControlProperties {

    

    private bool enabledField;

    

    public ControlProperties() {

        this.enabledField = true;

    }
兴趣点
我认为景点最大的quot; extraquot;应用程序提供的功能,允许把注释块和默认值,事情都只是一个标准的XSD工具的梦想!下一步是什么
我想在以后的版本添加的选项之间选择一个单一的文件,或分割成单个文件存储在一个文件夹结构中,也许所有的类。这将有助于改善一些后创造的工作,真烦人。
当然,如果有人想作出贡献,你总是更受欢迎!| eabidi77

回答

评论会员:游客 时间:2012/01/25
非常感谢分享,我学到了从你的代码地段最好的问候
海梅奥利瓦雷斯
评论会员:游客 时间:2012/01/25
。嗨,我刚开始尝试的CodeProcessor类,编译OK在VisualStudio2010不过,也有一些可以避免的警告:codepreWarning spanclass="code-digit"12/span Thevariablespanclass="code-string"'/spanspanclass="code-string"s'/spanisassignedbutitsspanclass="code-keyword"value/spanisneverused CodeProcessor.cs spanclass="code-digit"176/span spanclass="code-digit"32/spanWarning spanclass="code-digit"13/span Thevariablespanclass="code-string"'/spanspanclass="code-string"s'/spanisassignedbutitsspanclass="code-keyword"value/spanisneverused CodeProcessor.cs spanclass="code-digit"245/span spanclass="code-digit"32/spanWarning spanclass="code-digit"14/span Thevariablespanclass="code-string"'/spanspanclass="code-string"cc'/spanisdeclaredbutneverused CodeProcessor.cs spanclass="code-digit"417/span spanclass="code-digit"48/spanWarning spanclass="code-digit"15/span Thevariablespanclass="code-string"'/spanspanclass="code-string"ex'/spanisdeclaredbutneverused CodeProcessor.cs spanclass="code-digit"513/span spanclass="code-digit"30/span/pre/code最好的问候,海梅
。eabidi77
评论会员:游客 时间:2012/01/25
呃嗯......一如既往的编译器是正确的。我没有审查所有的代码,所以也许这些都只是垃圾变量。他们可以很容易地被删除,没有任何问题
。billwright2
评论会员:游客 时间:2012/01/25
试图建立的源代码和VisualStudio抱怨EABSoft.XmlToClass.pfx是加密,需要密码才能使用它:(
eabidi77
评论会员:游客 时间:2012/01/25
你是血腥的权利,芽我encripted重点用于部署。我会改变的源代码,并尽快更新的文章
。eabidi77
评论会员:游客 时间:2012/01/25
我上传的源代码,没有任何按键,你应该能够编译任何问题
billwright2
评论会员:谢谢 时间:2012/01/25
帕丁顿
评论会员:游客 时间:2012/01/25
您好,很好的工具!它的工作只是对几个较小的XSD文件罚款,但是当我测试一个大的XSD,这是分裂多个文件,我得到了下面的异常:System.InvalidCastException:无法投型"System.Xml.Schema.XmlSchemaAll"对象类型"System.Xml.Schema.XmlSchemaSequence"XMLtoClass.codeProcessor.getElements(对象值)XMLtoClass.Form1.btnChooseXML_Click(对象发件人,EventArgs的发送)System.Windows.Forms.Control.OnClick(级E)System.Windows.Forms.Button.OnClick(级E)System.Windows.Forms.Button.OnMouseUp(MouseEventArgsmevent)(System.Windows.Forms.Control.WmMouseUp消息M,MouseButtons按钮,Int32的点击)System.Windows.Forms.Control.WndProc(消息m)System.Windows.Forms.ButtonBase.WndProc(消息m)System.Windows.Forms.Button.WndProc(消息m)System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息m)System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息m)在System.Windows.Forms.NativeWindow.Callback(HWND的IntPtr,Int32的味精,IntPtr的WPARAM,IntPtr的LPARAM)我也想申请一个新的功能:如果生成的类文件将正确capatilized的,这将是很好,即book.xsd会产生一个Book类,而不是一本书的类。顺便说一句,定位是不完整的:消息框仍然是在意大利。输出语言选择时,我将取代复选框,单选按钮,让您选择只有一个。最好的语言输出设置(其他设置)将存储在应用程序设置。SubtitleCreator作者
eabidi77
评论会员:游客 时间:2012/01/25
劈裂可再生能源的大型模式更多的文件,好,我平时工作小。所以,我从来没有遇到这样的问题。可再生能源的资本,它真的不是一个大问题,它可以相当迅速实施。关心的语言,如果你检查更多的语言,应用程序将产生每个你选择的语言。langExt文件。本地化是相当混乱,你是对的。仍然有一些工作要做imgsrc=http://www.orcode.com/img/ico/smiley_smile.gif
。帕丁顿
评论会员:游客 时间:2012/01/25
关于本地化的问题,我使用了一个开源项目,对我工作得非常好:{A2}作者SubtitleCreator