存在一个名为XSD
的标准(XML Schema Definition),它将类定义生成为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只是用来提供一个简单的例子。
答案 0 :(得分:1)
如果要解析XML文件并在.net中创建自动生成的类,则应使用xsd.exe工具执行此操作,该工具是Visual Studio中Dev工具的一部分。
您需要打开Dev Command Prompt才能运行该工具。 Open Command Prompt from inside Visual Studio
VS 2013命令提示符的默认位置为here,但这可能会根据安装位置而改变。
在命令提示符中运行以下命令:
xsd'yourfilename'.xml
实施例: 这将在目录文件夹中自动生成XML Scheme File'yourfilename'.xsd。
接下来,我们希望使用我们选择的语言使用自动创建的XSD文件自动生成代码:
xsd'ourfilename'.xsd / classes / language:vb
实施例: 这将从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#类
以下是自动生成的代码:
//------------------------------------------------------------------------------
// <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;
}
}
}
**您还可以将命名空间作为参数提供。