2016-09-27 1 views
1

Je suis nouveau à VBA et XML et j'apprécierais votre aide. J'ai le code suivant:Lire XML en utilisant VBA: Liste toutes les occurrences d'un tag, y compris contextRef

Option Explicit 
Sub XMLfromPPTExample() 
Dim XDoc As MSXML2.DOMDocument 
Dim objxmlnodexbrl As MSXML2.IXMLDOMNode 
Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode 
Set XDoc = New MSXML2.DOMDocument 
XDoc.async = False 
XDoc.validateOnParse = False 
XDoc.Load("https://www.sec.gov/Archives/edgar/data/936468/000119312516476010/lmt-20151231.xml") 
Set objxmlnodexbrl = XDoc.SelectSingleNode("xbrl") 
Set objXMLNodeDIIRSP = objxmlnodexbrl.SelectSingleNode("us-gaap:GrossProfit") 
Worksheets("Tabelle1").Range("A1").Value = objXMLNodeDIIRSP.Text 
End Sub 

Ceci permet d'accéder d'un XML-feuille spécifique sur la base de données EDGAR de la SEC et écrit la valeur d'une variable définie (« us-gaap: marge brute ») dans le champ Excel A1.

Cependant, il est possible que cette balise apparaisse plusieurs fois dans ce fichier XML avec des valeurs différentes. Ce dont j'ai besoin, c'est que chacune de ces occurrences soit imprimée dans une table Excel, y compris la valeur et la valeur de "contextRef".

Pourriez-vous s'il vous plaît adapter mon code pour que cela fonctionne? Merci beaucoup. Envisagez d'utiliser le XPath MSXML DOM, en vous assurant de déclarer l'espace de noms us:gaap.

Répondre

1

Ci-dessous itère par index de noeud [#] de chaque balise <us-gaap:grossProfit>:

Sub XMLfromPPTExample() 
On Error GoTo ErrHandle 
    Dim XDoc As MSXML2.DOMDocument 
    Dim objxmlnodexbrl As MSXML2.IXMLDOMNode 
    Dim grossProfitList As MSXML2.IXMLDOMNodeList 
    Dim XmlNamespaces As String 
    Dim row As Integer 

    Set XDoc = New MSXML2.DOMDocument 
    XDoc.async = False 
    XDoc.validateOnParse = False 
    XDoc.Load ("https://www.sec.gov/Archives/edgar/data/936468/000119312516476010/lmt-20151231.xml") 

    XmlNamespaces = "xmlns:us-gaap='http://fasb.org/us-gaap/2015-01-31'" 
    XDoc.setProperty "SelectionNamespaces", XmlNamespaces 
    XDoc.setProperty "SelectionLanguage", "XPath" 

    Set grossProfitList = XDoc.DocumentElement.SelectNodes("//us-gaap:GrossProfit") 

    For row = 1 To grossProfitList.Length 
     Worksheets("Tabelle1").Range("A" & row).Value = XDoc.DocumentElement.SelectNodes("//us-gaap:GrossProfit[" & row & "]")(0).Text 
     Worksheets("Tabelle1").Range("B" & row).Value = XDoc.DocumentElement.SelectNodes("//us-gaap:GrossProfit[" & row & "]/@contextRef")(0).Text 
    Next row 

    Set grossProfitList = Nothing 
    Set XDoc = Nothing 
    Exit Sub 

ErrHandle: 
    MsgBox Err.Number & " - " & Err.Description 
    Exit Sub 
End Sub 

Sortie

4187000000 eol_PE11373---1510-K0017_STD_365_20131231_0 
5255000000 eol_PE11373---1510-K0017_STD_365_20141231_0 
5200000000 eol_PE11373---1510-K0017_STD_365_20151231_0