我会从 xml 创建一个类。在您执行此操作之前,请按照上面的方式获取 xml 样本,并将轴节点添加到任何一个行星节点。然后在 Visual Studio 中,编辑 >> 将 Xml 粘贴为类。它将创建您的模型。
XML:
<planets>
<planet>
<name>A Place</name>
<xcood>-123.764</xcood>
<ycood>272.182</ycood>
</planet>
<planet>
<name>Abadan</name>
<xcood>-70.319</xcood>
<ycood>-95.949</ycood>
<axis>some string</axis> <!--added this-->
<pressure>3</pressure>
<gravity>1.03</gravity>
<lifeForm>7</lifeForm>
<climate>2</climate>
<percentWater>63</percentWater>
<temperature>22</temperature>
<spectralClass>F</spectralClass>
<subtype>1</subtype>
<luminosity>V</luminosity>
<sysPos>5</sysPos>
<socioIndustrial>C-C-D-C-C</socioIndustrial>
<landMass>Abadan Major (Abbasid)</landMass>
<landMass>Abadan Minor</landMass>
<landMass>Kuran Major</landMass>
<landMass>Kuran Minor</landMass>
<hpg>B</hpg>
</planet>
<planet>
<name>Abagnar</name>
<xcood>380.231</xcood>
<ycood>314.823</ycood>
<faction>UND</faction>
<factionChange>
<date>2750-01-01</date>
<faction>DC</faction>
</factionChange>
</planet>
</planets>
生成的类:
'''<remarks/>
<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True),
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=False)>
Partial Public Class planets
Private planetField() As planetsPlanet
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("planet")>
Public Property planet() As planetsPlanet()
Get
Return Me.planetField
End Get
Set
Me.planetField = Value
End Set
End Property
End Class
'''<remarks/>
<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True)>
Partial Public Class planetsPlanet
Private nameField As String
Private xcoodField As Decimal
Private ycoodField As Decimal
Private factionField As String
Private factionChangeField As planetsPlanetFactionChange
Private axisField As String
Private pressureField As Byte
Private pressureFieldSpecified As Boolean
Private gravityField As Decimal
Private gravityFieldSpecified As Boolean
Private lifeFormField As Byte
Private lifeFormFieldSpecified As Boolean
Private climateField As Byte
Private climateFieldSpecified As Boolean
Private percentWaterField As Byte
Private percentWaterFieldSpecified As Boolean
Private temperatureField As Byte
Private temperatureFieldSpecified As Boolean
Private spectralClassField As String
Private subtypeField As Byte
Private subtypeFieldSpecified As Boolean
Private luminosityField As String
Private sysPosField As Byte
Private sysPosFieldSpecified As Boolean
Private socioIndustrialField As String
Private landMassField() As String
Private hpgField As String
'''<remarks/>
Public Property name() As String
Get
Return Me.nameField
End Get
Set
Me.nameField = Value
End Set
End Property
'''<remarks/>
Public Property xcood() As Decimal
Get
Return Me.xcoodField
End Get
Set
Me.xcoodField = Value
End Set
End Property
'''<remarks/>
Public Property ycood() As Decimal
Get
Return Me.ycoodField
End Get
Set
Me.ycoodField = Value
End Set
End Property
'''<remarks/>
Public Property faction() As String
Get
Return Me.factionField
End Get
Set
Me.factionField = Value
End Set
End Property
'''<remarks/>
Public Property factionChange() As planetsPlanetFactionChange
Get
Return Me.factionChangeField
End Get
Set
Me.factionChangeField = Value
End Set
End Property
'''<remarks/>
Public Property axis() As String
Get
Return Me.axisField
End Get
Set
Me.axisField = Value
End Set
End Property
'''<remarks/>
Public Property pressure() As Byte
Get
Return Me.pressureField
End Get
Set
Me.pressureField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property pressureSpecified() As Boolean
Get
Return Me.pressureFieldSpecified
End Get
Set
Me.pressureFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property gravity() As Decimal
Get
Return Me.gravityField
End Get
Set
Me.gravityField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property gravitySpecified() As Boolean
Get
Return Me.gravityFieldSpecified
End Get
Set
Me.gravityFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property lifeForm() As Byte
Get
Return Me.lifeFormField
End Get
Set
Me.lifeFormField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property lifeFormSpecified() As Boolean
Get
Return Me.lifeFormFieldSpecified
End Get
Set
Me.lifeFormFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property climate() As Byte
Get
Return Me.climateField
End Get
Set
Me.climateField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property climateSpecified() As Boolean
Get
Return Me.climateFieldSpecified
End Get
Set
Me.climateFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property percentWater() As Byte
Get
Return Me.percentWaterField
End Get
Set
Me.percentWaterField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property percentWaterSpecified() As Boolean
Get
Return Me.percentWaterFieldSpecified
End Get
Set
Me.percentWaterFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property temperature() As Byte
Get
Return Me.temperatureField
End Get
Set
Me.temperatureField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property temperatureSpecified() As Boolean
Get
Return Me.temperatureFieldSpecified
End Get
Set
Me.temperatureFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property spectralClass() As String
Get
Return Me.spectralClassField
End Get
Set
Me.spectralClassField = Value
End Set
End Property
'''<remarks/>
Public Property subtype() As Byte
Get
Return Me.subtypeField
End Get
Set
Me.subtypeField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property subtypeSpecified() As Boolean
Get
Return Me.subtypeFieldSpecified
End Get
Set
Me.subtypeFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property luminosity() As String
Get
Return Me.luminosityField
End Get
Set
Me.luminosityField = Value
End Set
End Property
'''<remarks/>
Public Property sysPos() As Byte
Get
Return Me.sysPosField
End Get
Set
Me.sysPosField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()>
Public Property sysPosSpecified() As Boolean
Get
Return Me.sysPosFieldSpecified
End Get
Set
Me.sysPosFieldSpecified = Value
End Set
End Property
'''<remarks/>
Public Property socioIndustrial() As String
Get
Return Me.socioIndustrialField
End Get
Set
Me.socioIndustrialField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("landMass")>
Public Property landMass() As String()
Get
Return Me.landMassField
End Get
Set
Me.landMassField = Value
End Set
End Property
'''<remarks/>
Public Property hpg() As String
Get
Return Me.hpgField
End Get
Set
Me.hpgField = Value
End Set
End Property
End Class
'''<remarks/>
<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True)>
Partial Public Class planetsPlanetFactionChange
Private dateField As Date
Private factionField As String
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(DataType:="date")>
Public Property [date]() As Date
Get
Return Me.dateField
End Get
Set
Me.dateField = Value
End Set
End Property
'''<remarks/>
Public Property faction() As String
Get
Return Me.factionField
End Get
Set
Me.factionField = Value
End Set
End Property
End Class
现在,这个类很容易使用,因为您有 .NET 类,而不是尝试导航 xml 文件。我建议使用 xml 序列化将 xml 加载到 .NET 对象中:
Imports System.Xml.Serialization
Imports System.IO
Module Module1
Sub Main()
Dim s As New XmlSerializer(GetType(planets))
Dim p As planets
' load the xml file
Using fs As New FileStream("planets.xml", FileMode.Open)
p = s.Deserialize(fs)
End Using
' operations on the planet objects
For Each planet In p.planet
planet.axis = "new value"
Next
' overwrite the xml file
Using fs As New FileStream("planets.xml", FileMode.Truncate)
s.Serialize(fs, p)
End Using
End Sub
End Module
如您所见,此代码会将每个行星的轴设置为“新值”。当然,您可以将其设置为您想要的任何值,因为在 for each 循环中您可以访问地球的所有其他 属性。不将它们视为 xml 节点使它们更易于使用。
注意:Visual Studio 的将 XML 粘贴为类非常棒,但如果您的字符串确实应该限制为几个值,则最好将它们设为枚举(如果没有您的干预,生成器不可能知道) .您应该修改生成的类或模型,使其更准确地表示您的数据。