通过VBA将多个XML记录导入MS Access时出现问题

问题描述 投票:0回答:1

我需要以XML格式从网站检索数据并将其保存在Access数据库中。虽然我能够成功提取数据,但我在解析它时遇到了问题。具体来说,我似乎只能读取返回的第一条记录,并且不知道如何循环其余的记录。

这是源XML的示例。这是特定个人的就业历史记录,因此名称,标题和日期字段将随每条记录而变化。在这个例子中,这个人有7个就业记录,每个记录都有不同的公司。

<DataRow>
<DataItem name="Symbol">00123S-E</DataItem>
<DataItem name="Company ID">061ABC-E</DataItem>
<DataItem name="Company Ticker">@NA</DataItem>
<DataItem name="Company Name">L.L. Bean, Inc.</DataItem>
<DataItem name="Title">Independent Director</DataItem>
<DataItem name="Function Code">IND</DataItem>
<DataItem name="Function Description">Independent Dir/Board Member</DataItem>
<DataItem name="Start Date">20140508</DataItem>
<DataItem name="End Date">@NA</DataItem>
</DataRow>

这是我认为可以工作的Access VBA代码:

Private Sub bNewFetch_Click()
    Dim xmldoc As MSXML2.DOMDocument
    Dim xmlElement As MSXML2.IXMLDOMElement
    Dim xmlSelection As MSXML2.IXMLDOMSelection
    Dim myLineItem As Object

    Set xmldoc = New MSXML2.DOMDocument
    xmldoc.async = False
    xmldoc.Load [Here's where the URL goes]

    Set xmlSelection = xmldoc.selectNodes("//DataRow")

    For Each xmlElement In xmlSelection
        Set myLineItem = xmldoc.selectNodes("//DataRow/DataItem")
        Debug.Print myLineItem(3).Text
    Next xmlElement
End Sub

不幸的是,代码只返回“L.L. Bean,Inc。”而不是返回这个人工作的7家不同公司的名字。 7次。它似乎知道有7条记录,但它不是单步执行这些记录并返回每个记录的相关公司名称,而只是重复第一条记录中的公司名称。

任何人都可以建议我需要做什么来从每个返回的记录中检索所有数据,而不仅仅是第一个?

在此先感谢您的任何建议。

解:

感谢BankBuilder指出我的检索循环问题。解决方案是将最后的For / Next语句替换为:

    For Each xmlElement In xmlSelection
        Debug.print xmlElement.selectSingleNode("DataItem[@name='Company Name']").Text
    Next xmlElement
xml access-vba
1个回答
1
投票

由于循环中的这一行,您只打印第一个DataRow的公司名称:

Set myLineItem = xmldoc.selectNodes("//DataRow/DataItem")

无论循环中的当前元素如何,它都会从第一个元素中提取数据。

Debug.print xmlElement.selectSingleNode("DataItem[@name='Company Name']").Text替换循环中的当前代码。这将在当前DataRow中打印DataItem的公司名称(也就是循环中的xmlElement)

© www.soinside.com 2019 - 2024. All rights reserved.