VBA XML ChildNodes

时间:2014-02-10 16:46:26

标签: xml excel vba excel-vba

我正在尝试修改我从user2140261获取的一段精细代码,该代码从XML类型(XBRL-Template)SEC EDGAR数据库中提取数据。因此,既然我想从其他节点中提取元素值,我的第一个想法是在MsgBox中显示带有XML实例的节点的列表;使用childNodes Property。第一个小片段,我做了一个小修改,以避免任何混淆,而在第二个我们看到原始代码加上修改的3个陈述

Dim Tiger As String  

Tiger = objXMLNodexbrl.ChildNodes(1)

MsgBox Tiger

Sub GetNode()
Dim strXMLSite As String
Dim objXMLHTTP As MSXML2.XMLHTTP
Dim objXMLDoc As MSXML2.DOMDocument
Dim objXMLNodexbrl As MSXML2.IXMLDOMNode
Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode
Dim Tiger As String

Set objXMLHTTP = New MSXML2.XMLHTTP
Set objXMLDoc = New MSXML2.DOMDocument

strXMLSite = "http://www.sec.gov/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml"

objXMLHTTP.Open "POST", strXMLSite, False
objXMLHTTP.send
objXMLDoc.LoadXML (objXMLHTTP.responseText)

Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("xbrl")

Tiger = objXMLNodexbrl.ChildNodes(1)

MsgBox Tiger

Set objXMLNodeDIIRSP = objXMLNodexbrl.SelectSingleNode("us-gaap:DebtInstrumentInterestRateStatedPercentage")

Worksheets("Sheet1").Range("A1").Value = objXMLNodeDIIRSP.Text
End Sub

因此,当我尝试使用F8逐步解析代码时,我得到一个“运行时错误438”,告诉我该对象不支持此属性或方法。

enter image description here

  • 如果实例文档中的xbrl是根元素并且它包含所有子节点,那怎么可能呢?

@ user2140261哇你是对的......只有一个问题我用

改变我的代码
Tiger = objXMLNodexbrl.ChildNodes(1).Text

但是我得到了元素的数值而不是节点的数量。怎么可能?从ChildNodes属性:“包含一个包含子节点的节点列表”......

enter image description here

1 个答案:

答案 0 :(得分:5)

更改您的代码行:

Tiger = objXMLNodexbrl.ChildNodes(1)

Tiger = objXMLNodexbrl.ChildNodes(1).Text

ALTERNATIVLY 你可以

将Tiger从字符串更改为MSXML2.IXMLDOMNode

然后改变

MsgBox Tiger

MsgBox Tiger.Text

objXMLNodexbrl.ChildNodes.Length将返回XBRL

内的节点数

如果您要获取XBRL的所有子节点名称列表,请忽略另一个名为nodeCurrent的MSXML2.IXMLDOMNode并使用以下内容:

For Each nodeCurrent In objXMLNodexbrl.ChildNodes
    Tiger = Tiger & ", " & nodeCurrent.nodeName
Next nodeCurrent

MsgBox Tiger