Существует стандарт под названием 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 был просто использован для предоставления простого примера.
Если вы хотите проанализировать 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;
}
}
}
** Вы также можете предоставить пространство имен в качестве параметра.
Других решений пока нет …