2014-11-24 91 views
0

我是使用帶有visual basic的XML的新手。我想要完成的是根據items節點將數據加載到文本框中。我用靜態地址做了這個。然而,現在我想要做的是能夠根據屏幕節點的屬性「ID」的屬性進行更改。基於屬性ID的XML解析

例如,如果屏幕節點的屬性ID = 36我希望aLabel.text等於「蘋果」。 我會接受C#中的答案,我也可以做或者。

XML示例

<Screen attribute ="35"> 
    <A>Chrono Trigger</A> 
</Screen> 
<Screen attribute ="36"> 
    <A>Apples</A> 
</Screen> 

VB.Net代碼

doc.Load(files) 
Static NodeNumber As Integer = 0 
RichTextBox1.Text = (doc.DocumentElement.SelectSingleNode("/Main/Screen").Attributes.ItemOf("ID").InnerText) 
aLabel.Text = (doc.DocumentElement.SelectSingleNode("/Main/Screen/A").InnerText) 
bLabel.Text = (doc.DocumentElement.SelectSingleNode("/Main/Screen/B").InnerText) 
cLabel.Text = (doc.DocumentElement.SelectSingleNode("/Main/Screen/C").InnerText) 
dLabel.Text = (doc.DocumentElement.SelectSingleNode("/Main/Screen/D").InnerText) 
+0

該函數使用[xpath](http://msdn.microsoft.com/en-us/library/ms256115(v = vs.110).aspx),嘗試搜索它是如何工作的。它應該看起來像這樣:屏幕[@ attribute = '35'] – 2014-11-24 20:44:05

回答

1

可以使用XPath來選擇適當的Screen元件,這樣

Dim screenNode as XmlNode = doc.SelectSingleNode("/Main/Screen[@attribute = '35']") 

與方括號中的部([@attribute = '35'])是一種條件 - 有點像If s tatement。 @符號用於指定您指定屬性的名稱而不是元素的名稱。

然後你就可以讀取子元素是這樣的:

aLabel.Text = screenNode.SelectSingleNode("A").InnerText 
bLabel.Text = screenNode.SelectSingleNode("B").InnerText 
cLabel.Text = screenNode.SelectSingleNode("C").InnerText 
dLabel.Text = screenNode.SelectSingleNode("D").InnerText 

XPath是一個非常強大的查詢語言,與許多其他功能。如果你打算使用XML很多,它肯定會推薦花一些時間來學習它的基礎知識。

+0

我缺少的大部分是語法。我知道XPath及其功能。回答了我的問題。 – 2014-11-24 20:53:02