用VBA解析XML
我正在尝试用VBA解析xml,以从电气测试系统获得测试结果。这是系统给我的一个例子:用VBA解析XML,xml,vba,excel,xml-parsing,Xml,Vba,Excel,Xml Parsing,我正在尝试用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 Nam
<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>
当我运行这个程序时,我得到了“运行时错误”-2147467259(80004005)”:setxreport处的自动化错误未指定错误
我还尝试将xml转换为新的MSXML2.DOMDocument(而不是DOMDocument60),但在同一行中出现了类型不匹配
非常感谢您的帮助
谢谢。这里有一种不用
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
选项显式
子样本()
将MyData设置为字符串,将strData()设置为字符串
我想我会坚持多久
将字符串变暗为字符串
“~~>在此处替换您的文件
打开二进制文件的“C:\Sample.xml”作为#1
MyData=空间$(LOF(1))
获取#1,MyData
关闭#1
strData()=拆分(MyData,vbCrLf)
对于i=LBound(strData)到UBound(strData)
如果InStr(1,strData(i),“我似乎记得当xml文档格式不正确时会出现这样的错误。它在一开始就有xml
元素吗?这可能会有帮助。我在我的原始帖子的第2行开始了代码。这是第一行:
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