Ho scritto del codice per importare alcuni dati da un file XML in Excel, funziona fino a quando non tenta di leggere attributi che non esistono; sono opzionali nel file e non posso aggiungerli, quindi devo gestirli nel codice.Come si gestiscono gli attributi XML facoltativi in VBA?
Ho provato a gestire gli oggetti con If Is Not Nothing
, ma questo non funziona, neanche If <> ""
o If <> Null
senza fortuna.
Se qualcuno può darmi qualsiasi assistenza sarei estremamente grato.
Public Sub import()
Dim oDoc As MSXML2.DOMDocument
Dim fSuccess As Boolean
Dim oRoot As MSXML2.IXMLDOMNode
Dim oSoftkey As MSXML2.IXMLDOMNode
Dim oAttributes As MSXML2.IXMLDOMNamedNodeMap
Dim oSoftkeyName As MSXML2.IXMLDOMNode
Dim oSoftkeyDescriptor As MSXML2.IXMLDOMNode
Dim oSoftkeyStyleName As MSXML2.IXMLDOMNode
Dim oChildren As MSXML2.IXMLDOMNodeList
Dim oChild As MSXML2.IXMLDOMNode
Dim intI As Integer
On Error GoTo HandleErr
Set oDoc = New MSXML2.DOMDocument
oDoc.async = False
oDoc.validateOnParse = False
fSuccess = oDoc.Load(ActiveWorkbook.Path & "\keys.xml")
If Not fSuccess Then
GoTo ExitHere
End If
intI = 2
ActiveSheet.Cells(1, 1).CurrentRegion.ClearContents
ActiveSheet.Cells(1, 1) = "Name"
ActiveSheet.Cells(1, 2) = "TextDescriptor"
ActiveSheet.Cells(1, 3) = "StyleName"
' Get the root of the XML tree.
' Set oRoot = oDoc.DocumentElement
Set oRoot = oDoc.SelectSingleNode("//IMS_Softkeys")
' Each IMS_Softkey in IMS_Softkeys
For Each oSoftkey In oRoot.ChildNodes
Set oAttributes = oSoftkey.Attributes
Set oSoftkeyName = oAttributes.getNamedItem("Name")
Set oSoftkeyDescriptor = oAttributes.getNamedItem("TextDescriptor")
Set oSoftkeyStyleName = oAttributes.getNamedItem("StyleName")
ActiveSheet.Cells(intI, 1).Value = oSoftkeyName.Text
'Can't handle optional attribute "TextDescriptor" or "SoftkeyStyle"
ActiveSheet.Cells(intI, 2).Value = oSoftkeyDescriptor.Text
ActiveSheet.Cells(intI, 3).Value = oSoftkeyStyleName.Text
intI = intI + 1
Next oSoftkey
ExitHere:
Exit Sub
HandleErr:
MsgBox "Error " & Err.Number & ": " & Err.Description
Resume ExitHere
Resume
End Sub
Un esempio di file XML (keys.xml):
<BATCH>
<IMS_BATCH>
<IMS_Softkeys>
<IMS_Softkey Name="Donut" StyleName="Mer-Green-Yellow" TextDescriptor="1 Donut" />
<IMS_Softkey Name="Hotdog" StyleName="Mer-White-Black" TextDescriptor="11" Hotdog" />
<IMS_Softkey Name="Coke_Image" TextDescriptor="Coke" />
<IMS_Softkey Name="DietCoke_Image" StyleName="Style for DietCocaCola" />
</IMS_Softkeys>
</IMS_BATCH>
</BATCH>
ringrazio molto, stavo usando 'Se non è sbagliato Nothing' . Funziona perfettamente ora. – sab0tage
@ sab0tage Sono felice di poterti aiutare. Su Stack Overflow diciamo grazie [accettando le risposte che ci hanno aiutato] (http://stackoverflow.com/help/accepted-answer). C'è un segno di spunta verde accanto alla risposta a sinistra che tu segni :) –