我的 XML 文件如下所示
<?xml version="1.0" encoding="utf-8" ?>
<root>
<mob name="mob1" lvl="5" hp="30" mp="25"/>
<mob name="mob2" lvl="6" hp="50" mp="55"/>
<mob name="mob3" lvl="9" hp="80" mp="85"/>
<mob name="mob4" lvl="11" hp="130" mp="125"/>
</root>
我对编程和开发一个可以列出和跟踪数据的程序相当陌生。 我想要做的是有一个组合框,其中填充了“名称”属性中的条目,当您在组合框中选择条目时,它将从同一节点中提取 Lvl、hp、mp 属性并将它们放入一些要使用和显示的变量。
我的工作方式是使用这样的 XML 文件
<?xml version="1.0" encoding="utf-8" ?>
<root>
<moblist list="mob1,mob2,mob3,mob4"/>
<mob0 lvl="5" hp="30" mp="25"/>
<mob1 lvl="6" hp="50" mp="55"/>
<mob2 lvl="9" hp="80" mp="85"/>
<mob3 lvl="11" hp="130" mp="125"/>
</root>
将 moblist 节点列表属性转换为列表,并使用它来填充组合框。 然后做这样的事情:
newindex = cmb_mobs.SelectedIndex
index = "/root/mob" & newindex
Dim doc As XmlDocument = New XmlDocument()
doc.Load("C:/test.xml")
Dim root As XmlNode = doc.DocumentElement
Dim mobs As XmlNode
mobs = root.SelectSingleNode(index)
Dim shw_lvl As String = mobs.Attributes.ItemOf("lvl").InnerText
Dim shw_hp As String = mobs.Attributes.ItemOf("hp").InnerText
Dim shw_mp As String = mobs.Attributes.ItemOf("mp").InnerText
每次组合框选择的索引发生变化时,我都会让它关闭。
问题1:有没有更好的方法来实现这些结果?如果可以做得更好,我愿意更改 xml 结构。
最佳答案
您可以使用 xml 序列化。
使用此 xml 文件,
<?xml version="1.0" encoding="utf-8" ?>
<root>
<mob name="mob1" lvl="5" hp="30" mp="25"/>
<mob name="mob2" lvl="6" hp="50" mp="55"/>
<mob name="mob3" lvl="9" hp="80" mp="85"/>
<mob name="mob4" lvl="11" hp="130" mp="125"/>
</root>
在VB中像这样定义xml模型
Imports System.Xml.Serialization
Imports System.IO
<XmlRoot("root")>
Public Class XmlModel
<XmlElement("mob")>
Public Property Mobs As List(Of XmlMob)
End Class
<Serializable>
Public Class XmlMob
<XmlAttribute("name")>
Public Property Name As String
<XmlAttribute("lvl")>
Public Property Level As Integer
<XmlAttribute("hp")>
Public Property HitPoints As Integer
<XmlAttribute("mp")>
Public Property MagicPoints As Integer
End Class
然后将 xml 文件反序列化为 XmlModel
类的实例
Private xmlMobs As XmlModel
Private Sub LoadXmlFile()
Dim s As New XmlSerializer(GetType(XmlModel))
Using sr As New StreamReader("c:/test.xml")
xmlMobs = s.Deserialize(sr)
End Using
End Sub
现在你有了一个变量xmlMobs
,它保存了所有的小怪信息。然后,您可以修改此变量(更改名称、统计信息等),并序列化回文件中。
Private Sub SaveXmlFile()
Dim s As New XmlSerializer(GetType(XmlModel))
Using sw As New StreamWriter("c:/test.xml")
s.Serialize(sw, xmlMobs)
End Using
End Sub
关于xml - VB.net XML 获取一组节点属性并按节点对它们进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536426/