2

これは、解析しようとしている XML 応答です。

<?xml version="1.0" encoding="utf-8"?>
<double xmlns="http://www.webserviceX.NET/">0.7627</double>

VB コード:

Dim responseString As String

Dim fromCurrency As String = "EUR"
Dim toCurrency As String = "USD"


Dim req As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=" & fromCurrency & "&ToCurrency=" & toCurrency)
Dim Resp As System.Net.HttpWebResponse = req.GetResponse()
Dim reader As StreamReader = New StreamReader(Resp.GetResponseStream)
responseString = reader.ReadToEnd()

'get the XML
Dim objXML As New XmlDocument
objXML.LoadXml(responseString)

Dim root As XmlNode = objXML.DocumentElement

Dim nodeList As XmlNodeList = root.SelectNodes("/double")

「0.7627」の結果値を読み取るにはどうすればよいですか?

私は試した:

nodeList(0).InnerText

nodeList(0).SelectSingleNode("/double").InnerText

どちらも「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーをスローします。

名前空間マネージャーも追加してみました:

Dim mgr As XmlNamespaceManager = New XmlNamespaceManager(objXML.NameTable)
mgr.AddNamespace("currency", objXML.DocumentElement.NamespaceURI)

Dim node As XmlNode = objXML.SelectSingleNode("double", mgr)

そして、次の方法で選択します。

node.InnerText

ただし、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」もスローされます。

4

2 に答える 2

3

コードで見られる問題は次のとおりです。

  • 名前空間を正しく定義する必要があります(XML内の名前空間です"http://www.webserviceX.NET/":)

  • 渡すXPath式で名前空間を使用する必要がありますSelectSingleNode

これが私がそれをした方法です(C#を使用して):

var namespaceManager = new XmlNamespaceManager(objXML.NameTable);
namespaceManager.AddNamespace("wsx", "http://www.webserviceX.NET/");

var doubleNode = root.SelectSingleNode("/wsx:double", namespaceManager);

Console.WriteLine(doubleNode.InnerText);

これがVB.NETに相当するものです(正しいといいのですが、ツールを使用してコードを変換しました):

Dim namespaceManager = New XmlNamespaceManager(objXML.NameTable)
namespaceManager.AddNamespace("wsx", "http://www.webserviceX.NET/")

Dim doubleNode = root.SelectSingleNode("/wsx:double", namespaceManager)

Console.WriteLine(doubleNode.InnerText)
于 2013-02-25T20:22:51.310 に答える
0

LINQtoXMLを使用してみることができます。

Imports System.XML.Linq

(...)

Dim req As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=" & fromCurrency & "&ToCurrency=" & toCurrency)
Dim Resp As System.Net.HttpWebResponse = req.GetResponse()

Dim doc as XDocument = XDocument.Load(Resp.GetResponseStream)
Dim myDoubleValue as Double = CDbl(doc.Root)

myDoubleValue0.7627である必要があります

于 2013-02-25T20:23:02.783 に答える