xml - 如何从 XML 文件中的特定节点获取值?

标签 xml vb.net linq xpath xml-serialization

从这个 XML 代码:

<?xml version="1.0" encoding="utf-8"?>
<Tabel>
  <Member>
    <Naam>Cruciatum</Naam>
    <Kills>1000</Kills>
    <Deaths>10</Deaths>
    <KD>100</KD>
  </Member>
  <Member>
    <Naam>Ghostbullet93</Naam>
    <Kills>10</Kills>
    <Deaths>1</Deaths>
    <KD>10</KD>
  </Member>
</Tabel>

如何获得(例如)<Kills> 旁边的 10 ?

我试过很多东西都没有成功。 我的想法之一是使用这段代码:

Dim doc = XDocument.Load("C:\members.xml")
        Dim members = From m In doc.Element("Tabel").Elements("Member")
                      Select naam = m.Element("Naam").Value
        For Each member In members
            lstmembers.Items.Add(member)
        Next

但我不知道如何编辑该片段以处理我现在需要它做的事情。

(上面的代码在使用它的地方完美地工作。)

最佳答案

您还可以使用 XPath 读取元素的值:

Dim doc As XmlDocument = New XmlDocument()
doc.Load("C:\members.xml")
Dim kills As String = doc.SelectNode("Tabel/Member[Naam='Ghostbullet93']/Kills").InnerText

但是,如果您打算加载和使用所有数据,那么使用序列化会容易得多。为此,您首先需要创建模仿 XML 结构的类(为简单起见,我将只使用公共(public)字符串字段,但最好使用属性):

Public Class Member
    Public Naam As String
    Public Kills As Integer
    Public Deaths As Integer
    Public KD As Integer
End Class

Public Class Tabel
    <XmlElement("Member")> _
    Public Members As List(Of Member)
End Class

然后像这样反序列化 XML:

Dim serializer As XmlSerializer = New XmlSerializer(GetType(Tabel))
Dim tabel As Tabel = CType(serializer.Deserialize(File.OpenRead("C:\members.xml")), Tabel)
For Each member As Member in tabel
    Dim kills As Integer = member.Kills
Next

关于xml - 如何从 XML 文件中的特定节点获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725820/

相关文章:

objective-c - 使用用于 Objective-C 的 GDataXMLNode 获取外部 XML?

xml - XML 属性中允许使用哪些字符?

c# - VB.NET SQL Server 查询到 LINQ

LINQ OrderBy : best search results at top of results list

linq - LINQ 语句中的 Select 是可选的吗?

html - 如何在sql这个例子中获取节点a和img?

android - 为什么 marginBottom 不起作用?

c# - 检查事件是否至少被触发一次

vb.net - VB.NET 中的内联 LINQ 注释

c# - 仅选择列表中多次出现的值 C# Linq