{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