2016-05-31 19 views
-1

VBAを使用して、以下のXMLの「レート」値を取得しようとしています(これは大幅に短縮されたバージョンで、実際には500以上の選択肢があります)。私は正しいノードに到達するまで、すべてのノードを1つずつ循環させることなく、そのノードに到達するのに苦労しています。Excel VBAでXMLを読む

-<DC> 
- <Overviews> 
     - <OverviewCurve> 
     <Identifier>zero_libor_usd</Identifier> 
     - <Curve> 
      - <YieldCurve> 
       - <Node> 
        <Term>32</Term> 
        <Rate>0.027613082673910938</Rate> 
       </Node> 
      </YieldCurve> 
      </Curve> 
     </OverviewCurve> 
</Overviews> 
</DC> 

私が使用しようとしていたコードが..です

Set xmldoc = New MSXML2.DOMDocument60 
xmldoc.async = False 
xmldoc.Load (Range("Path").Value & Range("FileName").Value) 
Set xmlNode2 =xmldoc.SelectSingleNode("/DC/Overviews/OverviewCurve/Identifier/Curve/YieldCurve/Node/Rate") 

しかしxmlNode2のコードを返す "何もありません"。 xmlファイル自体には基本的に5つの "OverviewCurve"ノードがあり、すべて50の "レート"ノード(つまり50 "用語"ノード)と同じ方法で構成されています。私はこれらのファイルをファイルから取得しようとしています。私は抽出しようとしているものに関連していないので、 "Overviews"ノードの子ノードである他のノードをいくつか削除しました。

答えて

0

複数Rateノードがある場合、XPATH "/ DC /概要/ OverviewCurve /識別子/曲線/ YieldCurve /ノード/速度" SingleNodeできません。

Dim xmlDoc As MSXML2.DOMDocument60 
Dim xmlNode As MSXML2.IXMLDOMNode 
Dim xmlNodeList As MSXML2.IXMLDOMNodeList 

Set xmlDoc = New MSXML2.DOMDocument60 
xmlDoc.async = False 
xmlDoc.Load "P:\test.xml" 

Set xmlNode = xmlDoc.SelectSingleNode("//Rate[1]") 'xmlNode is now the first Rate 

Set xmlNodeList = xmlDoc.SelectNodes("//Rate") 'xmlNodeList is now a list of all Rate nodes 

構文はhttps://en.wikipedia.org/wiki/XPathを参照してくださいXPATHです。