私は次のことに少しこだわっています。VBAを使用してローカル銀行のWebサイトからExcelに為替レートを取得しようとしています。主にXML解析の練習のために、これが私の最初の真剣な試みだと思います。
数時間グーグルして関連するSOの質問を読んだ後、私は多かれ少なかれ実用的な解決策を得ましたが、より良いXMLの控えめな表現のためにそれを最適化したいと思います。これまでのところ、問題は次のとおりです。
<LIST_RATE>
<RATE ISO="EUR" Code="978">
<TITLE>Евро</TITLE>
<CODE>978</CODE>
<ISO>EUR</ISO>
<DATE>Thu, 31 Jan 2013 09:00:00 GMT</DATE>
<BUY>11550.0000</BUY>
<SELL>11820.0000</SELL>
<QUANTITY>1</QUANTITY>
</RATE>
<RATE ISO="RUB" Code="643">
<TITLE>Российский рубль</TITLE>
<CODE>643</CODE>
<ISO>RUB</ISO>
<DATE>Thu, 31 Jan 2013 09:00:00 GMT</DATE>
<BUY>279.0000</BUY>
<SELL>292.0000</SELL>
<QUANTITY>1</QUANTITY>
</RATE>
<RATE ISO="USD" Code="840">
<TITLE>Доллар США</TITLE>
<CODE>840</CODE>
<ISO>USD</ISO>
<DATE>Thu, 31 Jan 2013 09:00:00 GMT</DATE>
<BUY>8570.0000</BUY>
<SELL>8710.0000</SELL>
<QUANTITY>1</QUANTITY>
</RATE>
</LIST_RATE>
上記のXML部分の場合(念のため-これは完全なXMLへのリンクです:http ://www.priorbank.by/CurratesExportXml.axd?channel = 9)次のコードを使用してRATE
ノードの子ノードをループしています:LIST_RATE
For Each RATE_Node In LIST_RATE_Node.ChildNodes
CurrencyCode = RATE_Node.ChildNodes.Item(2).Text 'ISO node
RateValue = CSng(Replace(RATE_Node.ChildNodes.Item(4).Text, ".", ",")) 'BUY node
[rest of code]
Next
コードは正常に機能していますが、の代わりに名前を使用して、RATE
ノードの子ノードを何らかの方法で選択したいと思いますItem(#)
。試しselectSingleNode
ましたが、XPathにまったく精通しておらず、使用した表記は常に最初の<RATE ISO="EUR" Code="978">
値を返しました。getElementsByTagName
ノードの束全体を返します。
関連するSOの質問をたくさん読みましたが、それでも行き詰まりました。解決策は単純だと確信しています。すべての目的を達成する必要があります。正しい方向へのアドバイスやガイダンスは大歓迎です。前もって感謝します!