2017-02-16 98 views
-2

存在一个叫做XSD(XML Schema Definition)的标准,它产生一个XML格式的类定义。生成的类可以使用以下语言:VB, C#, JS, VJS, C++如何从XSD/XML自动生成特定.NET语言的类的代码?

如何实现从此XML到特定语言的重新创建类?

的XML文件的例子可以如下:

<?xml version="1.0" encoding="utf-8" ?> 
<MyFile VersionProduct="7.0" VersionCreate="7.00" VersionFile="7.00"> 
    <MyTable Size="20"> 
    <StandardTable Type="TXT"> 
     <MyRecord Priority="1" Size="0" Length="350" Weight="270" Age="40" Ref="80"/> 
     <MyRecord Priority="100" Size="0" Length="27080" Weight="27000" Age="40" Ref="80"/> 
    </StandardTable> 
    </MyTable> 
    <MyTable Size="28"> 
    <StandardTable Type="TXT"> 
     <MyRecord Priority="1" Size="0" Length="350" Weight="270" Age="40" Ref="80"/> 
     <MyRecord Priority="100" Size="0" Length="27080" Weight="27000" Age="40" Ref="80"/> 
    </StandardTable> 
    <StandardTable Type="TRT"> 
     <MyRecord Priority="100" Size="0" Length="980" Weight="900" Age="40" Ref="0"/> 
    </StandardTable> 
    </MyTable> 
</MyFile> 

***有有更多的内容可以XML文件,我想从自动生成代码,这个XML只是用来提供一个简单的例子。

+1

你试过了什么?任何代码示例? 'EnvDTE'&'VSIX'是你正在寻找的关键字。 – Tatranskymedved

+0

@Tatranskymedved @Tatranskymedved我已经找到了解决方案,我只是认为我会分享,将它作为答案张贴在 –

+0

以下如果你倒退了,请解释一下,我会很乐意改变我的问题 –

回答

1

如果您想要解析XML文件并在.net中创建自动生成的类,那么您应该使用xsd.exe工具来完成此工作,该工具是Visual Studio中开发工具的一部分。

您将需要打开Dev Command Prompt来运行该工具。 Open Command Prompt from inside Visual Studio

VS 2013命令提示符的默认位置是here,但是这可能会根据安装位置而改变。

在命令提示符下运行以下命令:

XSD 'yourfilename'.xml

例子: enter image description here 这将自动生成的XML计划文件' yourfilename'.xsd在目录文件夹中。

接下来,我们要使用自动创建的XSD文件在我们所选择的语言自动生成的代码:

XSD“yourfilename'.xsd /班/语言:VB

示例: enter image description here 这将从XSD文件创建一个自动生成的.NET类,该类将包含在名为'yourfilename'.vb的文件中。

然后,您可以简单地将您的类文件添加到您的项目。我选择VB,但你可以选择'CS','VB','JS','VJS'或'CPP'。

这是创建在VB文件中的代码:

'------------------------------------------------------------------------------ 
' <auto-generated> 
'  This code was generated by a tool. 
'  Runtime Version:4.0.30319.42000 
' 
'  Changes to this file may cause incorrect behavior and will be lost if 
'  the code is regenerated. 
' </auto-generated> 
'------------------------------------------------------------------------------ 

Option Strict Off 
Option Explicit On 

Imports System.Xml.Serialization 

' 
'This source code was auto-generated by xsd, Version=4.0.30319.33440. 
' 

'''<remarks/> 
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true), _ 
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=false)> _ 
Partial Public Class MyFile 

    Private myTableField() As MyFileMyTable 

    Private versionProductField As String 

    Private versionCreateField As String 

    Private versionFileField As String 

    '''<remarks/> 
    <System.Xml.Serialization.XmlElementAttribute("MyTable", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _ 
    Public Property MyTable() As MyFileMyTable() 
     Get 
      Return Me.myTableField 
     End Get 
     Set 
      Me.myTableField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property VersionProduct() As String 
     Get 
      Return Me.versionProductField 
     End Get 
     Set 
      Me.versionProductField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property VersionCreate() As String 
     Get 
      Return Me.versionCreateField 
     End Get 
     Set 
      Me.versionCreateField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property VersionFile() As String 
     Get 
      Return Me.versionFileField 
     End Get 
     Set 
      Me.versionFileField = value 
     End Set 
    End Property 
End Class 

'''<remarks/> 
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _ 
Partial Public Class MyFileMyTable 

    Private standardTableField() As MyFileMyTableStandardTable 

    Private sizeField As String 

    '''<remarks/> 
    <System.Xml.Serialization.XmlElementAttribute("StandardTable", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _ 
    Public Property StandardTable() As MyFileMyTableStandardTable() 
     Get 
      Return Me.standardTableField 
     End Get 
     Set 
      Me.standardTableField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Size() As String 
     Get 
      Return Me.sizeField 
     End Get 
     Set 
      Me.sizeField = value 
     End Set 
    End Property 
End Class 

'''<remarks/> 
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _ 
Partial Public Class MyFileMyTableStandardTable 

    Private myRecordField() As MyFileMyTableStandardTableMyRecord 

    Private typeField As String 

    '''<remarks/> 
    <System.Xml.Serialization.XmlElementAttribute("MyRecord", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _ 
    Public Property MyRecord() As MyFileMyTableStandardTableMyRecord() 
     Get 
      Return Me.myRecordField 
     End Get 
     Set 
      Me.myRecordField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Type() As String 
     Get 
      Return Me.typeField 
     End Get 
     Set 
      Me.typeField = value 
     End Set 
    End Property 
End Class 

'''<remarks/> 
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _ 
Partial Public Class MyFileMyTableStandardTableMyRecord 

    Private priorityField As String 

    Private sizeField As String 

    Private lengthField As String 

    Private weightField As String 

    Private ageField As String 

    Private refField As String 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Priority() As String 
     Get 
      Return Me.priorityField 
     End Get 
     Set 
      Me.priorityField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Size() As String 
     Get 
      Return Me.sizeField 
     End Get 
     Set 
      Me.sizeField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Length() As String 
     Get 
      Return Me.lengthField 
     End Get 
     Set 
      Me.lengthField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Weight() As String 
     Get 
      Return Me.weightField 
     End Get 
     Set 
      Me.weightField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Age() As String 
     Get 
      Return Me.ageField 
     End Get 
     Set 
      Me.ageField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Ref() As String 
     Get 
      Return Me.refField 
     End Get 
     Set 
      Me.refField = value 
     End Set 
    End Property 
End Class 

'''<remarks/> 
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true), _ 
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=false)> _ 
Partial Public Class NewDataSet 

    Private itemsField() As MyFile 

    '''<remarks/> 
    <System.Xml.Serialization.XmlElementAttribute("MyFile")> _ 
    Public Property Items() As MyFile() 
     Get 
      Return Me.itemsField 
     End Get 
     Set 
      Me.itemsField = value 
     End Set 
    End Property 
End Class 

我跑了XSD。再次EXE工具来生成C#类以及

enter image description here

其次为这是自genearted代码:

//------------------------------------------------------------------------------ 
    // <auto-generated> 
    //  This code was generated by a tool. 
    //  Runtime Version:4.0.30319.42000 
    // 
    //  Changes to this file may cause incorrect behavior and will be lost if 
    //  the code is regenerated. 
    // </auto-generated> 
    //------------------------------------------------------------------------------ 

    using System.Xml.Serialization; 

    // 
    // This source code was auto-generated by xsd, Version=4.0.30319.33440. 
    // 


    /// <remarks/> 

    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
    [System.SerializableAttribute()] 
    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 
    public partial class MyFile { 


    private MyFileMyTable[] myTableField; 

    private string versionProductField; 

    private string versionCreateField; 

    private string versionFileField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("MyTable", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public MyFileMyTable[] MyTable { 
     get { 
      return this.myTableField; 
     } 
     set { 
      this.myTableField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string VersionProduct { 
     get { 
      return this.versionProductField; 
     } 
     set { 
      this.versionProductField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string VersionCreate { 
     get { 
      return this.versionCreateField; 
     } 
     set { 
      this.versionCreateField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string VersionFile { 
     get { 
      return this.versionFileField; 
     } 
     set { 
      this.versionFileField = value; 
     } 
    } 


} 

    /// <remarks/> 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
    [System.SerializableAttribute()] 
    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
    public partial class MyFileMyTable { 

    private MyFileMyTableStandardTable[] standardTableField; 

    private string sizeField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("StandardTable", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public MyFileMyTableStandardTable[] StandardTable { 
     get { 
      return this.standardTableField; 
     } 
     set { 
      this.standardTableField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Size { 
     get { 
      return this.sizeField; 
     } 
     set { 
      this.sizeField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
public partial class MyFileMyTableStandardTable { 

    private MyFileMyTableStandardTableMyRecord[] myRecordField; 

    private string typeField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("MyRecord", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public MyFileMyTableStandardTableMyRecord[] MyRecord { 
     get { 
      return this.myRecordField; 
     } 
     set { 
      this.myRecordField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Type { 
     get { 
      return this.typeField; 
     } 
     set { 
      this.typeField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
public partial class MyFileMyTableStandardTableMyRecord { 

    private string priorityField; 

    private string sizeField; 

    private string lengthField; 

    private string weightField; 

    private string ageField; 

    private string refField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Priority { 
     get { 
      return this.priorityField; 
     } 
     set { 
      this.priorityField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Size { 
     get { 
      return this.sizeField; 
     } 
     set { 
      this.sizeField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Length { 
     get { 
      return this.lengthField; 
     } 
     set { 
      this.lengthField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Weight { 
     get { 
      return this.weightField; 
     } 
     set { 
      this.weightField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Age { 
     get { 
      return this.ageField; 
     } 
     set { 
      this.ageField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Ref { 
     get { 
      return this.refField; 
     } 
     set { 
      this.refField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 
public partial class NewDataSet { 

    private MyFile[] itemsField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("MyFile")] 
    public MyFile[] Items { 
     get { 
      return this.itemsField; 
     } 
     set { 
      this.itemsField = value; 
     } 
    } 
} 

**你也可以提供命名空间作为参数。

+3

问题和答案都不会提供线索,最终会发生什么。问题是:问题太短,范围广而不清晰(您可以提供xml示例,生成的类等来清楚地显示*问题*),答案看起来像是两个非常简单的步骤的组合(告诉我哪一个更困难):阅读有关xsd工具的文档,并从VS中搜索如何使用它。 – Sinatr

+0

@Sinatr我添加了一个XML示例以及该工具生成的文件内容。我希望这可以让你更容易理解问题和答案 –