使用VBAparsingXML

我试图用VBAparsingxml以获得电气testing系统的testing结果。 这是系统给我的一个例子:

<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> 

我想从<prop name = 'serial number'>提取<prop name = 'serial number'><Report UUTResult = 'Failed'>的testing结果,以及<Prop Type='Obj' TypeName='NI_CriticalFailureStackEntry' Flags='0x0'> <Value>Brady Detection</Value>

我以前从来没有用过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)':在设置xReport自动化错误未指定错误。

我也尝试铸造XML为新的MSXML2.DOMDocument(而不是DOMDocument60),然后我得到一个types不匹配在同一行。

任何帮助深表感谢!

谢谢。

这是一种无需使用MSXML即可获取数据的方法

尝试和testing

如果你的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 

产量

在这里输入图像说明