2014-11-24 87 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