2017-09-30 27 views
0

오늘 나는 vba를 사용하여 XML 문서에서 xpath를 적용한 항목을 구문 분석하는 방법을 보여준 데모를 발견 한 블로그를 보았습니다. 그것은 웹 사이트에서 동일한 작업을 수행 할 수 있다면 그것은 대단 할 것입니다.xpath를 사용하여 vba를 사용하여 XML 문서 구문 분석하기

Sub XML_Parsing() 
    Dim xml As Object, post As Object 

    Set xml = CreateObject("MSXML2.DOMDocument") 
    xml.async = False: xml.validateOnParse = False 
    xml.Load (ThisWorkbook.Path & "\htdocs.txt") 

    For Each post In xml.SelectNodes("//DistributionLists/List") 
     x = x + 1: Cells(x, 1) = post.SelectNodes(".//Name")(0).Text 
     Cells(x, 2) = post.SelectNodes(".//TO")(0).Text 
     Cells(x, 3) = post.SelectNodes(".//CC")(0).Text 
     Cells(x, 4) = post.SelectNodes(".//BCC")(0).Text 
    Next post 
End Sub 

그리고 위의 코드는 바탕 화면에 저장 "htdocs.txt"라는 텍스트 파일에 적용되어야한다 : 여기

는이 로컬로 저장 파일에서 수행하는 방법이다.

<?xml version="1.0" encoding="utf-8"?> 
<DistributionLists> 
    <List> 
     <Name>Recon</Name> 
     <TO>John;Bob;Rob;Chris</TO> 
     <CC>Jane;Ashley</CC> 
     <BCC>Brent</BCC> 
    </List> 
    <List> 
     <Name>Safety Metrics</Name> 
     <TO>Tom;Casper</TO> 
     <CC>Ashley</CC> 
     <BCC>John</BCC> 
    </List> 
    <List> 
     <Name>Performance Report</Name> 
     <TO>Huck;Ashley</TO> 
     <CC>Tom;Andrew</CC> 
     <BCC>John;Seema</BCC> 
    </List> 
</DistributionLists> 

추출 된 결과 :

Recon John;Bob;Rob;Chris Jane;Ashley Brent 
Safety Metrics Tom;Casper Ashley John 
Performance Report Huck;Ashley Tom;Andrew John;Seema 

지금, 나는 두 가지 질문이 있어요 :

1. How to parse the same from a website as i did above, as in "example.com"? If it was "html element" then i could load like "html.body.innerHTML = http.responsetext" but in this case what should be the process? 
2. If i do the above thing using EARLY BINDING: what should be the reference to add to the library? 

답변

1

이미 해결책을 발견 한 것으로 보인다. 여기있다 :

Sub XML_Parsing() 
    Dim http As New XMLHTTP60 
    Dim xmldoc As Object, post As Object 

    With http 
     .Open "GET", "http://wservice.viabicing.cat/v1/getstations.php?v=1", False 
     .send 
     Set xmldoc = .responseXML 
     xmldoc.LoadXML .responseXML.xml 
    End With 

    For Each post In xmldoc.SelectNodes("//station") 
     x = x + 1: Cells(x, 1) = post.SelectNodes(".//lat")(0).Text 
     Cells(x, 2) = post.SelectNodes(".//long")(0).Text 
    Next post 
End Sub 

부분 결과 :

$41.40 2.180042 
41.39553 2.17706 
41.393699 2.181137 
41.39347 2.18149