Retour à tous les noeuds à partir du fichier XML, même lorsqu'ils sont vides

J'ai un fichier XML récupéré via WSDL dans Access 2010 via VBA. Le fichier XML est assis dans cette variable

Dim xmlDoc As New DOMDocument60

La partie du XML, je suis intéressé par ressemble au dessous et fondamentalement juste réitère pour chaque UserBean. Un UserBean est essentiellement un compte d'utilisateur dans un système.

<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>

Le problème est que pas tous les champs sont obligatoires à remplir.

Par conséquent, certains nœuds ont pas de données

À l'aide de la MSXML2 bibliothèque en VBA renvoie uniquement les nœuds si il est en fait un texte.
Donc le code ci-dessous sera de retour d'une quantité variable de nœuds en fonction de ce que chaque userbean contient. Par exemple, certains utilisateurs n'ont pas une mobileNumber peuplée.

Set nodes xmlDoc.selectNodes("//UserBean")
For Each node in nodes  
    debug.print node.text  
next node

Le code ci-dessus renvoie une longue chaîne qui a toutes les valeurs de tous les nœuds enfants en elle (par rapport à la Userbean nœud), mais seuls ceux qui ont de texte. J'ai essaye de mettre cela dans une table dans Access et si certains nœuds sont manquant de temps en temps, j'ai aucun moyen de retrouver... ou dois-je?

Comment puis-je retourner TOUS les nœuds qu'ils sont remplis ou non

OU

Comment puis-je identifier le nom du nœud qui a le texte donc je sais où mettre la valeur dans la table dans Access?

Mise à JOUR

Suite à la ci-dessous les commentaires, ce que je suis après une liste de Userbeans, qui sont eux-mêmes une liste...donc en fait je suis après une liste de listes...donc, avec cela à l'esprit, j'ai essayé le ci-dessous, mais il a échoué à la première For Each boucle. Évidemment, ce type de boucle ne peut pas gérer à l'aide de listes comme un compteur pour une autre liste. Est-il un moyen de contourner cela?

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
  • Peut-être: debug.print node.nodename & "=" & node.text
  • C'est à proximité @Tim Williams. Le résultat de votre code est UserBean=4908414false614203Andrew....etc de sorte que les champs ne sont pas cassés. Le UserBean est vraiment une liste de nœuds, mais ici son être traités comme un seul nœud.
  • Si possible, faire tourner un moteur SQL server -- il est de LOIN préférable XML capacités de l'Accès. FWIW.
  • désolé, qu'entendez-vous par "faire tourner un moteur SQL server'? Heureux de faire cela de la manière la plus efficace possible.
  • SQL Server de Microsoft. La version Express comprend la syntaxe complète, et peut facilement servir de back-end pour une seule application de bureau. Et si c'est un accès multi-utilisateur de l'application, vous devriez vraiment migrer vers un réseau central zone de.
InformationsquelleAutor zoonosis | 2013-05-22