2016-05-31 3 views
-1

나는 VBA를 사용하여 아래의 XML에서 "Rate"값을 얻으려고합니다. (이것은 훨씬 단축 된 버전입니다. 실제로는 선택할 수있는 500 가지 이상의 속도가 있습니다). 나는 올바른 노드에 도달 할 때까지 모든 단일 노드를 순환하지 않고도 그 노드에 도달하기 위해 고심하고 있습니다.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 파일 자체는 근본적으로 50 개의 "비율"노드 (즉, 50 "용어"노드)와 동일한 방식으로 구조화 된 5 개의 다른 "OverviewCurve"노드를 가지고 있습니다. 파일에서 이들 각각을 얻으려고합니다. 추출하려고하는 노드와 관련이 없으므로 "개요"노드의 하위 노드를 제거했습니다. 여러 Rate 노드가있는 경우

답변

0

는 다음 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 

구문 XPATHhttps://en.wikipedia.org/wiki/XPath가 표시된다.

관련 문제