2014-02-10 13 views
0

Я пытаюсь изменить прекрасный фрагмент кода, который я получил от user2140261, который извлекает данные из базы данных XML EDBAR (XBRL-Template). Поэтому, поскольку я хочу также извлекать значения элементов из других узлов, моя первая идея заключалась в том, чтобы показать список с узлами экземпляра XML в MsgBox; используя childNodes Property. Первый маленький фрагмент кода, имеет незначительные изменения, я сделал, чтобы избежать путаницы, в то время как во втором мы видим исходный код плюс 3 заявления модификацийVBA XML ChildNodes

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

ответ

4

Изменить строку кода из:

Tiger = objXMLNodexbrl.ChildNodes(1) 

Для

Tiger = objXMLNodexbrl.ChildNodes(1).Text 

АЛЬТЕРНАТИВНО Вы можете

изменение Tiger из строки в MSXML2.IXMLDOMNode

затем изменить

MsgBox Tiger 

Для

MsgBox Tiger.Text 

objXMLNodexbrl.ChildNodes.Length возвращает количество узлов в части XBRL

Если вы пытаются получить список всех имен дочерних узлов XBRL, затем Dim another MSXML2.IXMLDOMNode называется nodeCurrent и использовать следующее:

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

MsgBox Tiger 
+0

Сэр я редактировал мой вопрос немного, так как вы были правы только, чтобы исправить это и увидеть другую вещь происходит: P – ExoticBirdsMerchant

+1

@ExoticBirdsMerchant Посмотреть мой обновленный ответ. – user2140261

+0

Сэр Спасибо вам большое! У MS нет примеров в MSXML2 для VBA только для C++ и JScript – ExoticBirdsMerchant

Смежные вопросы