【发布时间】:2021-05-23 11:23:15
【问题描述】:
我正在尝试直接从 SEC 解析财务信息,并且有一个关于在 Excel 中使用 VBA 解析 XML 文档的问题。我知道可以通过引用子节点和项目编号的文档来工作,但是文档很大,需要很长时间才能通读并识别我需要的每个项目。
我在网上看到使用 XPATH 来更有效地查询 XML 文档是很常见的。我尝试了很多方法,但到目前为止我还没有成功。我相信我的问题是了解元素所在的命名空间以及如何正确引用指定命名空间下的元素。
下面是我尝试引用任意元素的代码的一部分,
Sub SecData()
Dim xml_obj As MSXML2.XMLHTTP60
Dim xDoc As New MSXML2.DOMDocument60
Dim xml_url As String
Dim nodes As Variant
Set xml_obj = New MSXML2.XMLHTTP60
xml_url = "https://www.sec.gov/Archives/edgar/data/320193/000032019321000010/aapl-20201226_htm.xml"
xml_obj.Open bstrMethod:="GET", bstrURL:=xml_url
xml_obj.send
xDoc.LoadXML (xml_obj.responseText)
xDoc.SetProperty "SelectionLanguage", "XPath"
xDoc.SetProperty "SelectionNamespaces", "xmlns:link='http://www.xbrl.org/2003/linkbase'"
nodes = xDoc.SelectNodes("//RevenueFromContractWithCustomerExcludingAssessedTax")
XML 文档太大,无法包含在问题中,所以我将在下面留下一个链接,
https://www.sec.gov/Archives/edgar/data/320193/000032019321000010/aapl-20201226_htm.xml
任何帮助将不胜感激!
谢谢
【问题讨论】:
-
如果我搜索它
RevenueFromContractWithCustomerExcludingAssessedTax,我会在该页面中获得 28 个结果。你在 28 个结果之后吗? -
说实话,我还没有确切地验证我正在寻找哪些值。我正在寻找引用任何特定元素的过程,然后在弄清楚我需要什么后应用该过程。所以要可怕地回答你的问题,我可能需要 28 个结果...
-
这工作
xDoc.getElementsByTagName("us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax")。
标签: xml vba web-scraping xml-parsing finance