2012-07-20 96 views
2

我有一个非常简单的问题,但由于我是XML新手,我遇到了一些问题。我有这样的XML文档:如何在VB.NET中读取XML元素

<?xml version="1.0" encoding="utf-8"?> 
<Form_Layout> 
    <Location> 
    <LocX>100</LocX> 
    <LocY>100</LocY> 
    </Location> 
    <Size> 
    <Width>300</Width> 
    <Height>300</Height> 
    </Size> 
</Form_Layout> 

我想要做的是阅读从LocX,氧基,宽度和高度元素的值到我相应的变量。

这是我曾尝试:

Dim XmlReader = New XmlNodeReader(xmlDoc) 
While XmlReader.Read 
    Select Case XmlReader.Name.ToString() 
     Case "Location" 
      If XmlReader.?? 
     Case "Size" 
      If XmlReader.?? 
    End Select 
End While 

但是,我想不出如何访问每个子节点。

+1

您正在使用哪个版本的.NET? – Inisheer 2012-07-20 14:53:40

回答

3

如果你能使用LINQ到XML,你可以使用VB的XML Axis Properties

Dim root As XElement = XDocument.Load(fileName).Root 

Dim LocX = Integer.Parse(root.<Location>.<LocX>.Value) 
Dim LocY = Integer.Parse(root.<Location>.<LocY>.Value) 

而且root.<Location>.<LocY>.Value = CStr(120)工作过。

0

下面介绍如何使用XmlDocument和XPath来完成此操作。我确信其他人会很乐意使用XDocument和LINQ自愿举例。

Dim doc As New XmlDocument() 
doc.LoadXml("...") 
Dim locX As Integer = Integer.Parse(doc.SelectSingleNode("/FormLayout/Location/LocX").InnerText) 
Dim locY As Integer = Integer.Parse(doc.SelectSingleNode("/FormLayout/Location/LocY").InnerText) 
Dim width As Integer = Integer.Parse(doc.SelectSingleNode("/FormLayout/Size/Width").InnerText) 
Dim height As Integer = Integer.Parse(doc.SelectSingleNode("/FormLayout/Size/Height").InnerText) 

此外,你可能想看看的XmlSerializer类,看看是否是你有兴趣,那类将读取XML文件,并用它来填充新的属性值目的。您只需创建一个模仿XML的结构以反序列化的类。

+0

非常感谢。 如果有人可以举一个例子用LINQ我会很高兴 – Nianios 2012-07-20 15:20:11

0

使用LINQ,XML,

Dim root As XElement = XDocument.Load(fileName).Root 

Dim LocX = Integer.Parse(root.Element("Location").Element("LocX").Value) 
Dim LocY = Integer.Parse(root.Element("Location").Element("LocY").Value) 
+0

非常感谢你 – Nianios 2012-07-20 15:35:18

+0

另外一个问题是如果我想做相反的事情: root.Element(“Location”)。Element(“LocX” ).Value = locX'locX是我的变量 是吗? – Nianios 2012-07-20 15:40:11