2016-09-14 93 views
1

我有以下XML:如何使用VB.NET从XML获取属性值?

<?xml version="1.0" encoding="UTF-8"?> 
    <gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"> 
    <gesmes:subject>Reference rates</gesmes:subject> 
    <gesmes:Sender> 
    <gesmes:name>European Central Bank</gesmes:name> 
    </gesmes:Sender> 
    <Cube> 
    <Cube time='2016-09-12'> 
     <Cube currency='USD' rate='1.1226'/> 
     <Cube currency='JPY' rate='114.38'/> 
    </Cube> 
    </Cube> 
    </gesmes:Envelope> 

我想每个属性的货币价值。 现在我用的这个,但它不工作:

Dim xmlTree1 As New XmlDocument() 
    xmlTree1.Load("C:\\download\eurofxref-daily.xml") 

    Dim currencyUSD As String = xmlTree1.SelectSingleNode("/gesmes:Envelope/Cube/Cube/Cube[@currency='USD']/@rate").Value 
    Dim currencyJPY As String = xmlTree1.SelectSingleNode("/gesmes:Envelope/Cube/Cube/Cube[@currency='JPY']/@rate").Value 
+0

请将您尝试从中提取的xml以及您创建xmlTree1的代码发布。 – FloatingKiwi

+0

我已经把XML和代码的代码放在了我创建xmlTree1的地方。 – SeaSide

+2

'gesmes'前缀需要注册到命名空间。看到这篇关于使用命名空间管理器的文章https://support.microsoft.com/en-us/kb/318545 – FloatingKiwi

回答

1

另一种方法是使用VB.NET的真棒LINQ到XML功能(框架3.5及更高版本):

Imports <xmsns:xref="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"> 

... 

Dim xdoc = XDocument.Load("C:\kursna_standalone\download\eurofxref-daily.xml") 
Dim cubes = xdoc.Root.<xref:Cube>.<xref:Cube> 
Dim currencyUSD = cubes.Where(Function(x) x.currency = "USD")[email protected] 
Dim currencyJPY = cubes.Where(Function(x) x.currency = "JPY")[email protected] 

(注:我所有的VB代码示例假设选项严格和Option推断是活动的)。

+0

谢谢你的回答Heinzi。这将与NET.Framework 4一起工作,但目前我正在使用NET.Framework 2并且它不识别XDocument。 – SeaSide

+0

@SeaSide:如果这是您的选择,.NET Framework 3.5也应该可以正常工作。 – Heinzi

+0

这是很好的知道,因为我一定会升级更新。谢谢。 – SeaSide

1

我使用下面的代码从XML的价值和它的工作原理:

Dim xmlTree1 As New XmlDocument() 
xmlTree1.Load("C:\\kursna_standalone\download\eurofxref-daily.xml") 

Dim xmlnsManager1 As New System.Xml.XmlNamespaceManager(xmlTree1.NameTable) 
xmlnsManager1.AddNamespace("gm1", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref") 

Dim currencyUSD As String = xmlTree1.SelectSingleNode("//gm1:Cube/gm1:Cube/gm1:Cube[@currency='USD']/@rate", xmlnsManager1).Value 
Dim currencyJPY As String = xmlTree1.SelectSingleNode("//gm1:Cube/gm1:Cube/gm1:Cube[@currency='JPY']/@rate", xmlnsManager1).Value