2015-06-10 126 views
0

我想用excel vba解析xml文件。這是我的xml文件看起來像:從VBA解析XML不起作用

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Environment> 
    <Variable> 
     <Name></Name> 
     <Caption>T1</Caption> 
     <Type>TEXT</Type> 
     <Value>V1</Value> 
     <Description></Description> 
    </Variable> 
     <Variable> 
     <Name></Name> 
     <Caption>T2</Caption> 
     <Type>TEXT</Type> 
     <Value>V2</Value> 
     <Description></Description> 
    </Variable> 
     <Variable> 
     <Name></Name> 
     <Caption>T3</Caption> 
     <Type>TEXT</Type> 
     <Value>V3</Value> 
     <Description></Description> 
    </Variable> <Variable> 
     <Name></Name> 
     <Caption>T4</Caption> 
     <Type>TEXT</Type> 
     <Value>V4</Value> 
     <Description></Description> 
    </Variable> <Variable> 
     <Name></Name> 
     <Caption>T5</Caption> 
     <Type>TEXT</Type> 
     <Value>V5</Value> 
     <Description></Description> 
    </Variable> 
    </Variable> <Variable> 
     <Name></Name> 
     <Caption>T6</Caption> 
     <Type>TEXT</Type> 
     <Value>V6</Value> 
     <Description></Description> 
    </Variable> 
</Environment> 

這裏是我的代碼來分析它:

Public Function ll() 
Dim doc As DOMDocument60 
Set doc = New DOMDocument60 
doc.Load "E:\web\cc.xml" 
Dim Variables As IXMLDOMNodeList 
Dim variable As IXMLDOMNode 
Set Variables = doc.SelectNodes("/Environment/Variable") 
For Each variable In Variables 
    Debug.Print variable.SelectNodes("Caption").Item(0).Text 
    Debug.Print variable.SelectNodes("Type").Item(0).Text 
Next 
End Function 

但我沒能得到這個成功運行。我使用Excel 2013,並且引用了Microsoft XML 6.0。但執行中沒有任何反應。我試圖用錯誤語句來捕獲錯誤,但它返回錯誤號0.任何人都可以在這裏提供我所做的錯誤。

+2

的XML的格式不正確。在最後一個'Variable'元素之前有一個''。 –

+0

同意@AxelRichter。 VTC –

+0

感謝您的快速回復! – justanotherguy

回答

0

XML解析器只有在XML格式正確的情況下才能工作。否則,oXMLDOMDocument.load方法失敗。

要檢查這一點,你可以使用oXMLDOMDocument.parseError這樣的:

Public Function ll() 

Dim oDoc As Object 
Set oDoc = CreateObject("MSXML2.DOMDocument") 
oDoc.Load "E:\web\cc.xml" 

Dim oErr As Object 

If oDoc.parseError.ErrorCode <> 0 Then 
    Set oErr = oDoc.parseError 
    Debug.Print oErr.reason 
End If 

Dim oVariables As Object 
Dim oVariable As Object 
Set oVariables = oDoc.SelectNodes("/Environment/Variable") 
For Each oVariable In oVariables 
    Debug.Print oVariable.SelectNodes("Caption").Item(0).Text 
    Debug.Print oVariable.SelectNodes("Type").Item(0).Text 
Next 

End Function 

參見:https://msdn.microsoft.com/en-us/library/ms762722%28v=vs.85%29.aspx