在VBA中使用XPath选择XML中的节点

时间:2015-09-08 15:32:00

标签: xml vba xpath

我现在有代码,我认为应该工作,但不是。它什么都不返回。我对XML非常陌生,所以它可能只是一个语法问题。

http://i.imgur.com/YatU8N3.png?1

代码:

Public Sub CreateXmlDom()

    Dim xDoc As MSXML2.DOMDocument
    Dim xmlNameSpaces As String

    Dim xmlNodeList As MSXML2.IXMLDOMNodeList

    Dim strFullFilename As String
        strFullFilename = "S:\Investments\Data\Companies House\Monthly Companies House Downloads\Accounts_Monthly_Data-April2014\Prod224_0005_00011771_20131231.html"

    Set xDoc = New MSXML2.DOMDocument

        With xDoc

        If .Load(strFullFilename) Then
            .setProperty "SelectionLanguage", "XPath"
            .setProperty "SelectionNamespaces", "xmlns:ns5=""http://www.xbrl.org/uk/gaap/core/2009-09-01"""

            Set xmlNodeList = .SelectNodes("//ns5:CashBankInHand")
        End If

        End With

End Sub

我想要选择的XML文档中的元素:

enter image description here

来自doc标题:

enter image description here

Document full text

Document download

1 个答案:

答案 0 :(得分:1)

因此,事实证明这是一种组合语法/并且不太了解XML层次结构#34;问题。

所以,首先,这不是一个节点,它甚至不是一个属性,它只是一个值:

"ns5:CashBankInHand"

它包含在节点<ix:nonFraction ...>中,因此我的XPath字符串的第一部分应为:

("//ix:nonFraction")

然后,name是一个属性,因此实际查询应为:

("//ix:nonFraction [@name = ""ns5:CashBankInHand""]")

完美无缺。