簡體   English   中英

如何從XML文件中的特定節點獲取值?

[英]How do I get the value from a specific node in an XML file?

從這個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 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

Steve推薦的XPathXmlDeserialization是很好的選擇,但對於純LINQ解決方案,您只需要Where查詢中添加適當的Where子句。

Dim doc = XDocument.Load("C:\members.xml")
Dim members = From m In doc.Element("Tabel").Elements("Member")
              Where m.Element("Naam").Value = "Ghostbullet93"
              Select kills = m.Element("Kills").Value

在這個例子中, members仍然是IEnumerable<String> ,所以如果你只有1個對象,你需要做類似的事情:

Dim member = members.First()  // will throw exception if collection is empty

要么

Dim member = members.Single()  // will throw exception if collection is empty or has 2 or more elements

(我的vb.NET非常生疏,所以請原諒任何語法錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM