xml - VB.net XML 获取一组节点属性并按节点对它们进行分组?

标签 xml vb.net

我的 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/

相关文章:

javascript - 如何使用 fetch api 获取 XML

java - 无法使用 dom4j 从 xml 字符串解析节点

.net - VB.NET 中的奇怪 -1.#IND 错误

.net - Visual Basic 数组的第一个元素

java - Android 应用程序错误应用程序在安装时崩溃

php - 确定 DOMElement 的父节点

mysql - 显示两个表中的数据,但第二个表的数据比第一个表多

.net - 闪烁且 "CreateParams"

java - 当设置为 Android 4.0 时,Eclipse 无法识别 numberPassword?

sql - 如何使用 SQL 创建多个存储过程