VBA XML ChildNodes

我正在尝试修改从user2140261从XMLtypes(XBRL模板)SEC EDGAR数据库中提取数据的一段优秀代码。 所以,因为我想从其他节点拉元素值,我的第一个想法是显示在MsgBox的XML实例的节点的列表; 通过使用childNodes属性 。 第一个小片段,我做了小的修改,以避免任何混淆,而在第二个,我们看到原代码加上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 

所以当我试图parsing一步一步的代码使用F8我得到一个'运行时错误438'告诉我,该对象不支持此属性或方法。

在这里输入图像说明

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

@ user2140261哇你是这么正确的…只是一个问题,我改变我的代码

 Tiger = objXMLNodexbrl.ChildNodes(1).Text 

但我得到的元素的数值而不是节点的数量。 这怎么可能? 因为ChildNodes属性:“包含包含子节点的节点列表”…

在这里输入图像说明

改变你的代码行:

 Tiger = objXMLNodexbrl.ChildNodes(1) 

 Tiger = objXMLNodexbrl.ChildNodes(1).Text 

另外你可以

将Tiger从string更改为MSXML2.IXMLDOMNode

然后改变

 MsgBox Tiger 

 MsgBox Tiger.Text 

objXMLNodexbrl.ChildNodes.Length将返回XBRL的节点数量

如果您正在尝试获取XBRL的所有子节点名称的列表,则Dim另一个名为nodeCurrent并使用以下命令:

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