我正在尝试修改我从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”,告诉我该对象不支持此属性或方法。
@ user2140261哇你是对的......只有一个问题我用
改变我的代码Tiger = objXMLNodexbrl.ChildNodes(1).Text
但是我得到了元素的数值而不是节点的数量。怎么可能?从ChildNodes属性:“包含一个包含子节点的节点列表”......
答案 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