2016-09-27 4 views
1

私はVBAとXMLを初めて使いました。VBAを使用してXMLを読む: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 

これはSECのエドガー・データベース上の特定のXML-シートにアクセスし、定義されたタグ(「私たち-GAAP:GrossProfit」)の値を書き込みます:ExcelのフィールドA1に、私は次のコードを持っています。

ただし、このXMLファイルでこのタグが異なる値で複数回発生する可能性があります。私が必要とするのは、これらのそれぞれの出現が、「contextRef」の値と値を含むExcelテーブルに出力されることです。

これが機能するように自分のコードを適応させてください。どうもありがとうございました。

答えて

1

MSXML DOMのXPathを使用して、名前空間us:gaapを宣言してください。各<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 

出力

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 
関連する問題