我通过 VBA 在 Access 2010 中通过 WSDL 检索了一个 XML 文件。XML 文件位于此变量中
Dim xmlDoc As New DOMDocument60
我感兴趣的 XML 部分如下所示,基本上只是对每个UserBean
. AUserBean
基本上是系统中的用户帐户。
<UserBean xsi:type="ns1:UserBean">
<primaryKey xsi:type="xsd:string">49084</primaryKey>
<updateIndex xsi:type="xsd:int">14</updateIndex>
<deleted xsi:type="xsd:boolean">false</deleted>
<loginID xsi:type="xsd:string">61420313556</loginID>
<name xsi:type="xsd:string">Andrew Mills</name>
<teams xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]">
<string xsi:type="xsd:string">Maintenance</string>
</teams>
<timezone xsi:type="xsd:string">Australia/Brisbane</timezone>
<userTypePK xsi:type="xsd:string">3776</userTypePK>
<description xsi:type="xsd:string"/>
<emailAddress xsi:type="xsd:string"/>
<phoneNumber xsi:type="xsd:string"/>
<faxNumber xsi:type="xsd:string"/>
<pagerNumber xsi:type="xsd:string"/>
<mobileNumber xsi:type="xsd:string">61420313556</mobileNumber>
<securityQuestion xsi:type="xsd:string">__INVALID</securityQuestion>
<securityAnswer xsi:type="xsd:string"/>
<synchronisation xsi:type="soapenc:Array" soapenc:arrayType="ns2:SynchronisationBean[0]" xmlns:ns2="http://soap2.nads.econz.co.nz"/>
</UserBean>
问题是并非每个字段都必须填写。
因此,某些节点没有数据
在 VBA 中使用 MSXML2 库仅在其中实际存在文本时才返回节点。因此,下面的代码将根据每个 userbean 包含的内容返回可变数量的节点。例如,某些用户没有填充 mobileNumber。
Set nodes xmlDoc.selectNodes("//UserBean")
For Each node in nodes
debug.print node.text
next node
上面的代码返回一个长字符串,其中包含所有子节点的所有值(相对于Userbean
节点),但只有具有文本的子节点。我正在尝试将其放入 Access 中的表中,如果某些节点有时会丢失,我无法跟踪它......还是我?
如何返回所有节点,无论它们是否已填充或
如何
识别具有文本的节点的名称,以便我知道将值放入 Access 表中的何处?
更新
除了下面的评论,我想要的是一个 Userbeans 列表,它们本身就是一个列表......所以事实上我在一个列表列表之后......所以考虑到这一点,我尝试了下面但它在第一个For Each
循环中失败了。显然,这种类型的循环不能处理使用列表作为另一个列表的计数器。有没有解决的办法?
Dim node As MSXML2.IXMLDOMNode
Dim userbeans As MSXML2.IXMLDOMNodeList
Dim userbean As MSXML2.IXMLDOMNodeList
Set userbeans = xmlDoc.selectNodes("//UserBean")
For Each userbean In userbeans '**Type mismatch error here**
For Each node In userbean
Debug.Print node.nodeName & ":" & node.Text
Next node
Next userbean