2013-11-21 2 views
0

xml을 VBA로 구문 분석하여 전기 테스트 시스템에서 테스트 결과를 얻으려고합니다. 나는 '<Prop Type='Obj' TypeName='NI_CriticalFailureStackEntry' Flags='0x0'> <Value>Brady Detection</Value>VBA로 XML 파싱

에서

<Reports> 
<Report Type='UUT' Title='UUT Report' Link='-1-2013-11-20-10-2-46-867' UUTResult='Failed' StepCount='132'> 
<Prop Name='UUT' Type='Obj' TypeName='UUT' Flags='0x0'> 
    <Prop Name='SerialNumber' Type='String' Flags='0x0'> 
     <Value>02</Value> 
    </Prop> 
    <Prop Name='PartNumber' Type='String' Flags='0x0'> 
     <Value>1009433</Value> 
    </Prop> 
    <Prop Name='LotNumber' Type='String' Flags='0x0'> 
     <Value>1234567</Value> 
    </Prop> 
    <Prop Name='CriticalFailureStack' Type='Array' LBound='[0]' HBound='[1]' ElementType='Obj' Flags='0x0'> 
     <ArrayElementPrototype Type='Obj' TypeName='NI_CriticalFailureStackEntry' Flags='0x0'> 
      <Prop Name='StepName' Type='String' Flags='0x0'> 
       <Value></Value> 
      </Prop> 
      <Prop Name='SequenceName' Type='String' Flags='0x0'> 
       <Value></Value> 
      </Prop> 
      <Prop Name='SequenceFileName' Type='String' Flags='0x0'> 
       <Value></Value> 
      </Prop> 
      <Prop Name='ResultId' Type='Number' Flags='0x0'> 
       <Value>0</Value> 
      </Prop> 
     </ArrayElementPrototype> 
     <Value ID='[0]'> 
      <Prop Type='Obj' TypeName='NI_CriticalFailureStackEntry' Flags='0x0'> 
       <Prop Name='StepName' Type='String' Flags='0x0'> 
        <Value>Brady Detection</Value> 
       </Prop> 
       <Prop Name='SequenceName' Type='String' Flags='0x0'> 
        <Value>MainSequence</Value> 
       </Prop> 
       <Prop Name='SequenceFileName' Type='String' Flags='0x0'> 
        <Value>1009450 AT ILR Final-test_app.seq</Value> 
       </Prop> 
       <Prop Name='ResultId' Type='Number' Flags='0x0'> 
        <Value>44</Value> 
       </Prop> 
      </Prop> 
     </Value> 
     <Value ID='[1]'> 
      <Prop Type='Obj' TypeName='NI_CriticalFailureStackEntry' Flags='0x0'> 
       <Prop Name='StepName' Type='String' Flags='0x0'> 
        <Value>Number of Brady Beats</Value> 
       </Prop> 
       <Prop Name='SequenceName' Type='String' Flags='0x0'> 
        <Value>Brady Detection</Value> 
       </Prop> 
       <Prop Name='SequenceFileName' Type='String' Flags='0x0'> 
        <Value>1009450 AT ILR Final-test_app.seq</Value> 
       </Prop> 
       <Prop Name='ResultId' Type='Number' Flags='0x0'> 
        <Value>49</Value> 
       </Prop> 

내가 <Report UUTResult = 'Failed'>에서 <prop name = 'serial number'>에서 테스트 결과를 일련 번호를 꺼내 싶습니다, 장치 고장이 시스템이 저를주고 무엇의 예입니다 이전 XML로 일했다, 그러나 이것은 내가 지금까지이 사이트를 읽어 왔 것입니다 결코했습니다 : 자동화 :이 프로그램을 실행할 때

Dim xml As New MSXML.DOMDocument60 
Dim xReport As IXMLDOMElement 
Dim result As String 

xml.Load (filePath) 
Set xReport = xml.SelectSingleNode("//Reports/Report/") 
result = xReport.getAttribute("UUTResult") 

, 내가 런타임 오류 '-2147467259 (80004005)' "수 Set xReport에서 오류가 지정되지 않았습니다.

또한 MSXML2.DOMDocument (DOMDocument60이 아닌)로 xml을 캐스팅 한 다음 같은 줄에 형식이 일치하지 않습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

나는 XML 문서가 잘 형성되지 않았을 때 그런 오류가 점점 기억하는 것 같다. 맨 처음에는'xml' 요소가 있습니까? – Mansfield

+0

이 [link] (http://stackoverflow.com/questions/19729601/dynamically-search-for-data-in-an-xml-file-with-vba/19730346#19730346) 도움이 될 수 있습니다. – Santosh

+0

2 행의 원래의 게시물에서 코드를 시작했습니다. 이것은 첫 번째 줄입니다 : ? mkodikan

답변

2

여기

MSXML 시도하고 XML의 당신의 형식은 당신이 원하는 걸 줄 것이보다 변경되지 않으면

테스트를 사용하지 않고 데이터를 얻을 수 한 가지 방법입니다.

Option Explicit 

Sub Sample() 
    Dim MyData As String, strData() As String 
    Dim i As Long 
    Dim sString As String 

    '~~> Replace your file here 
    Open "C:\Sample.xml" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 

    For i = LBound(strData) To UBound(strData) 
     If InStr(1, strData(i), "<Prop Name='SerialNumber'", vbTextCompare) Then 
      sString = strData(i + 1) 
      Exit For 
     End If 
    Next 

    If sString <> "" Then 
     Debug.Print Trim(Replace(Replace(sString, "<Value>", ""), "</Value>", "")) 
    End If 
End Sub 

출력

enter image description here