Как автоматически сгенерировать код класса на конкретном языке .NET из XSD / XML?

Существует стандарт под названием XSD (Определение схемы XML), которое создает определение класса в формате XML. Созданный класс может быть на следующих языках: VB, C#, JS, VJS, C++

Как я могу добиться воссоздания классов из этого 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 был просто использован для предоставления простого примера.

-2

Решение

Если вы хотите проанализировать XML-файл и создать автоматически сгенерированный класс в .net, вы должны сделать это с помощью инструмента xsd.exe, который входит в состав инструментов Dev в Visual Studio.

Вам нужно будет открыть командную строку Dev, чтобы запустить инструмент.
Откройте командную строку из Visual Studio

Расположение по умолчанию для командной строки для VS 2013 Вот, но это может измениться в зависимости от места установки.

В командной строке выполните следующие команды:

xsd ‘yourfilename’.xml

Пример:
введите описание изображения здесь
Это автоматически сгенерирует файл схемы XML ‘yourfilename’.xsd в папке каталога.

Далее мы хотим автоматически сгенерировать код, используя автоматически созданный XSD-файл на выбранном нами языке:

xsd ‘yourfilename’.xsd / classes / language: vb

Пример:
введите описание изображения здесь
Это создаст автоматически сгенерированный класс .NET из файла XSD, который будет содержаться в файле с именем ‘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 #

введите описание изображения здесь

и следующий был код, который был автогенерирован:

    //------------------------------------------------------------------------------
// <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;
}
}
}

** Вы также можете предоставить пространство имен в качестве параметра.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]