Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过VBA将多个XML记录导入MS Access时出现问题_Xml_Ms Access_Vba - Fatal编程技术网

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

通过VBA将多个XML记录导入MS Access时出现问题,xml,ms-access,vba,Xml,Ms Access,Vba,我需要以XML格式从网站检索数据,并将其保存在Access数据库中。虽然我能够成功地提取数据,但在解析数据时遇到了问题。具体来说,我似乎只能读取返回的第一条记录,而不知道如何循环浏览其余的记录 下面是一个源XML的示例。这是特定个人的就业历史记录,因此姓名、职务和日期字段将随每个记录而更改。在本例中,此人有7个可用的雇佣记录,每个记录都在不同的公司 <DataRow> <DataItem name="Symbol">00123S-E</DataItem> &l

我需要以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>
不幸的是,代码没有返回此人工作过的7家不同公司的名称,而是简单地返回了“L.L.Bean,Inc.”7次。它似乎知道有7条记录,但它不是单步遍历这些记录并返回每个记录的相关公司名称,而是重复第一条记录中的公司名称

有谁能建议我需要做些什么来检索每个返回记录中的所有数据,而不仅仅是第一条记录

提前感谢您的建议

解决方案:

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

    For Each xmlElement In xmlSelection
        Debug.print xmlElement.selectSingleNode("DataItem[@name='Company Name']").Text
    Next xmlElement

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

Set myLineItem = xmldoc.selectNodes("//DataRow/DataItem")
它从第一个元素中提取数据,而不考虑循环中的当前元素


将循环中的当前代码替换为
Debug.print xmlElement。选择SingleNode(“DataItem[@name='Company name'])。Text
。这将打印当前数据行中数据项的公司名称(也称为循环中的xmlElement)

myLineItem(0)。文本是符号
myLineItem(1)。Text
是公司ID。
myLineItem(2)。Text
是公司ID。您认为myLineItem(3)。Text
应该是什么?谢谢您的建议。不幸的是,当我进行此更改时,会出现运行时错误91。“未设置对象变量或带块变量”。你知道是什么原因吗?查看我的更新,删除
selectSingleNode
Yes中的前导“/”!明亮的这就成功了。我将更新问题以反映这一点。非常感谢你的帮助!我已经用这个代码做了两个星期了,但没有成功。你解决了我生活中的许多挫折。非常感谢!听到这个消息我很高兴!
Set myLineItem = xmldoc.selectNodes("//DataRow/DataItem")