in:gaap xbrl Selectsinglenode с несколькими атрибутами ничего не возвращает в VBA

Я пытаюсь извлечь значения из XML-файла XBRL. Я не разбираюсь в возможностях MSXML VBA. XML-файл

    <?xml version="1.0" encoding="UTF-8"?>

    <!-- XBRL Instance Document Created By :- Relyon Softech Ltd. -->

    <!-- Date/time created: 29/10/2013 4:47:38 PM -->
    <xbrli:xbrl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns="http://www.xbrl.org/2003/instance" xmlns:in-ca-roles="http://www.icai.org/xbrl/taxonomy/2012-03-31/in-ca-roles" xmlns:negated="http://www.xbrl.org/2009/role/negated" xmlns:in-gaap="http://www.icai.org/xbrl/taxonomy/2012-03-31/in-gaap" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:num="http://www.xbrl.org/dtr/type/numeric" xmlns:net="http://www.xbrl.org/2009/role/net" xmlns:in-roles="http://www.icai.org/xbrl/taxonomy/2012-03-31/in-gaap-roles" xmlns:in-ca="http://www.icai.org/xbrl/taxonomy/2012-03-31/in-ca" xmlns:ref="http://www.xbrl.org/2006/ref" xmlns:in-ci-ent="http://www.icai.org/xbrl/taxonomy/2012-03-31/in-gaap/in-ci-ent" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:nonnum="http://www.xbrl.org/dtr/type/non-numeric" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xmlns:targetNamespace="http://www.icai.org/xbrl/taxonomy/2012-03-31/in-gaap/in-ci-ent">
       <link:schemaRef xlink:href="http://www.mca.gov.in/XBRL/2012/08/02/Taxonomy/CnI/in-ci-ent-2012-03-31.xsd" xlink:type="simple"/>
          <xbrli:context id="D2012">
             <xbrli:entity>
               <xbrli:identifier scheme="http://www.mca.gov.in/CIN">U63010MH1993PLC075480</xbrli:identifier>
             </xbrli:entity>
            .................
          </xbrli:context>
          <in-gaap:RevenueFromSaleOfProducts id="CYTAG60" unitRef="INR" contextRef="D2013" decimals="-3">0</in-gaap:RevenueFromSaleOfProducts>
          <in-gaap:RevenueFromSaleOfProducts id="PYTAG60" unitRef="INR" contextRef="D2012" decimals="-3">0</in-gaap:RevenueFromSaleOfProducts>
            .................
            <in-gaap:ProfitBeforePriorPeriodItemsExceptionalItemsExtraordinaryItemsAndTax id="CYTAG88" unitRef="INR" contextRef="D2013" decimals="-3">22163000</in-gaap:ProfitBeforePriorPeriodItemsExceptionalItemsExtraordinaryItemsAndTax>
            <in-gaap:ProfitBeforePriorPeriodItemsExceptionalItemsExtraordinaryItemsAndTax id="PYTAG88" unitRef="INR" contextRef="D2012" decimals="-3">-14284000</in-gaap:ProfitBeforePriorPeriodItemsExceptionalItemsExtraordinaryItemsAndTax>
            .................
     </xbrli:xbrl>

"..." содержит другой нерелевантный код. Теперь файл Excel имеет следующие значения ячеек: C4 (имя элемента) = in-gaap:ProfitBeforePriorPeriodItemsExceptionalItemsExtraordinaryItemsAndTax, D4 = местоположение документа, E4 = контекст (например, «D2013»), G4 = выходное значение. (должно быть 22163000)

Я хочу извлечь значение элемента в C4 в G4.

Код VBA:

   Sub XbrlExtract()

    Dim LoadFile As String
    LoadFile = Range("D4").Value

    Dim Concept As String
    Concept = Range("C4").Value

    Dim Context As String
    Context = Range("E4").Value

    Dim oDocument As MSXML2.DOMDocument60
    Dim oXbrlNode As MSXML2.IXMLDOMNode
    Dim oNode As MSXML2.IXMLDOMNode

    Set oDocument = New MSXML2.DOMDocument60
    oDocument.DocumentElement
    oDocument.async = False
    oDocument.validateOnParse = False
    oDocument.Load (LoadFile)

    oDocument.setProperty "SelectionNamespaces", "xmlns:xbrli = 'http://www.mca.gov.in/instance' xmlns:in-gaap = 'http://www.xbrl.org/instance'"
    oNode = oDocument.SelectSingleNode("/xbrli:xbrl/" & Concept & "[@contextRef = '" & Context & "']")
    If oNode Is Nothing Then
      MsgBox "No nodes selected"
    Else
     Range("G4").Select
     Debug.Print oNode.Text
    End If
    Set oDocument = Nothing

  End Sub

Код не обнаруживает элемент, и oNode возвращает ничего с сообщением «Нет выбранных узлов», а G4 остается пустым. Я искал много сайтов, но не мог решить эту проблему.


person Yags    schedule 11.08.2014    source источник


Ответы (1)


В вашем экземпляре документа у вас есть это объявление пространства имен:

xmlns:xbrli="http://www.xbrl.org/2003/instance"

Но вы добавляете это пространство имен в selectionNamespaces из oDocument

xmlns:xbrli = 'http://www.mca.gov.in/instance'

Тот же префикс, но разные пространства имен.

Совет. По умолчанию MSXML2.DOMDocument2 позволяет использовать те же префиксы пространства имен, что и объявленные в загруженном документе, поэтому нет необходимости вызывать oDocument.setProperty "SelectionNamespaces" для работы selectNodes или selectSingleNode.

person Bill Velasquez    schedule 12.08.2014
comment
Спасибо, проблема решена. Хотя, если я удалю oDocument.setProperty, он выдаст ошибку Ссылка на необъявленный префикс пространства имен: 'xbrli' . Так я и не удалял. - person Yags; 18.08.2014