我有以下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 :(得分: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
答案 1 :(得分:1)
另一种方法是使用VB.NET(Framework 3.5及更高版本)的强大Linq-to-XML功能:
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").@rate
Dim currencyJPY = cubes.Where(Function(x) x.currency = "JPY").@rate
(注意:我的所有VB代码示例均假设Option Strict和Option Infer处于活动状态。)