Excel 2010 VBA解析XML-不了解在何处找到Nodelist.Item

Excel 2010 VBA解析XML-不了解在何处找到Nodelist.Item,xml,excel,vba,xml-parsing,Xml,Excel,Vba,Xml Parsing,我正在研究借用的代码,以了解它是如何解析XML以及如何找到数据位的。我对XML和解析非常陌生,因此,对于这个基本问题,我提前表示歉意 当我在Watch窗口中查看oNodelist2时,我可以看到它有Item1、Item2、Item3和Item4,但我不明白: Item0在哪里,我认为它应该在@contextRef中查找它? 在哪里可以找到strContextID='I2013Q4'的值 Sub tester2() Dim oInstance As MSXML2.DOMDocument60 Di

我正在研究借用的代码,以了解它是如何解析XML以及如何找到数据位的。我对XML和解析非常陌生,因此,对于这个基本问题,我提前表示歉意

当我在Watch窗口中查看oNodelist2时,我可以看到它有Item1、Item2、Item3和Item4,但我不明白:

Item0在哪里,我认为它应该在@contextRef中查找它? 在哪里可以找到strContextID='I2013Q4'的值

Sub tester2()

Dim oInstance As MSXML2.DOMDocument60
Dim m_strUSGAAP_TaxonomyVersion As String
Dim m_strInvest_TaxonomyVersion As String
Dim m_strDEI_TaxonomyVersion As String

Dim oNodelist2 As MSXML2.IXMLDOMNodeList
Dim strContextID As String
Dim i As Long

Set oInstance = New MSXML2.DOMDocument60
oInstance.async = False
oInstance.validateOnParse = False
oInstance.Load "http://www.sec.gov/Archives/edgar/data/1143908/000114390813000035/ck0001143908-20130831.xml"

m_strUSGAAP_TaxonomyVersion = "http://fasb.org/us-gaap/2012-01-31"
m_strInvest_TaxonomyVersion = "http://xbrl.sec.gov/invest/2012-01-31"
m_strDEI_TaxonomyVersion = "http://xbrl.sec.gov/dei/2012-01-31"

oInstance.setProperty "SelectionNamespaces", "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xbrli='http://www.xbrl.org/2003/instance' xmlns='http://www.xbrl.org/2003/instance' xmlns:xbrldi='http://xbrl.org/2006/xbrldi' xmlns:us-gaap='" & m_strUSGAAP_TaxonomyVersion & "' xmlns:dei='" & m_strDEI_TaxonomyVersion & "' xmlns:currency='http://xbrl.sec.gov/currency/2012-01-31' xmlns:invest='" & m_strInvest_TaxonomyVersion & "'"

Set oNodelist2 = oInstance.SelectNodes("//us-gaap:Assets | //us-gaap:AssetsCurrent | //us-gaap:LiabilitiesAndStockholdersEquity")

i = 0
strContextID = oNodelist2.Item(i).SelectSingleNode("@contextRef").Text

Debug.Print strContextID

End Sub
提前感谢您在上述方面提供的任何帮助


此外,如果任何人有一个关于解析、MSXML、DOM 6、注释列表和名称空间的好网站或书籍的rec,我将不胜感激。

项目1、项目2等只是监视窗口中用于显示节点列表中各个项目的方法。它并不表示基础列表是否从位置0、1或其他位置开始

IXMLDOMNodeList是基于零的,因此监视窗口中的项1将是通过访问的节点。项0您可以通过尝试访问集合中的最后一项来确认该列表确实是基于零的。您应该发现.Item6会导致错误,而.Item5不会


strContextID的值来自与oInstance.selectNodes调用中的XPath表达式相匹配的第一个节点的contextRef属性。谢谢@barrowc。当我通过观察窗口项查看时,您知道I2013Q4是一个明显的值,还是会隐藏在文本中的字符串或其中一个项中的xml值中?看起来像oNodelist2>项1>属性>项1>节点值是观察窗口中该值的最直接路径。如果您将监视窗口中的Value列设置得足够宽,那么还可以将其视为onodelist2>item1>xml的一部分,但随后必须从xml中提取值。使用相关属性的nodeValue,此注释中列出的第一个方法更有可能执行您想要的操作,即只返回值本身