[英]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推薦的XPath
或XmlDeserialization
是很好的選擇,但對於純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.