IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Problème import XML dans Access: Elements manquants.


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème import XML dans Access: Elements manquants.
    Bonjour à tous,
    je rencontre un problème d'import de fichier XML dans Access (Données externes / Fichier XML)
    Le format est pourtant très simple mais je tourne en rond depuis 2 jours...

    Voici le fichier XML initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0"?>
    <DATAROOT>
    <EVENT><A>A</A><B>B</B><C>C</C><D>D</D><E>E</E><F>F</F><G>G</G><H>H</H><I>I</I><J>J</J><K>K</K><L>L</L><M>M</M></EVENT>
    <EVENT><N>N</N><O>O</O><P>P</P><Q>Q</Q><R>R</R><S>S</S><T>T</T><U>U</U><V>V</V><W>W</W><X>X</X><Y>Y</Y><Z>Z</Z></EVENT>
    </DATAROOT>
    Résultat dans Access, il manque une ligne EVENT :
    A B C D E F G H I J K L M


    Par contre il suffit de passer l'objet M dans l'autre EVENT et là ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0"?>
    <DATAROOT>
    <EVENT><A>A</A><B>B</B><C>C</C><D>D</D><E>E</E><F>F</F><G>G</G><H>H</H><I>I</I><J>J</J><K>K</K><L>L</L></EVENT>
    <EVENT><M>M</M><N>N</N><O>O</O><P>P</P><Q>Q</Q><R>R</R><S>S</S><T>T</T><U>U</U><V>V</V><W>W</W><X>X</X><Y>Y</Y><Z>Z</Z></EVENT>
    </DATAROOT>
    Résultat dans Access :

    A B C D E F G H I J K L
    M N O P Q R S T U V W X Y Z

    J'ai essayé sur une autre machine en ACCESS 2007, même résultat...
    Please Help !

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,
    Je savais déjà que MS Access n'est pas un champion de l'XML mais je ne connaissais pas ce problème. J'ai essayé et j'obtiens le même résultat qui me laisse pantois. Je ne peux pas vous proposer une solution facile et rapide. Eventuellement, vous utilisez XSLT pour transformer votre fichier avant importation ou alors vous utilisez DOMXML pour lire votre fichier.
    Avec une transformation XSLT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strSourceFile = "C:\Temp\Test.xml"
    strStylesheetfile = "C:\Temp\TransfromTest.xslt"
    strResultFile = "C:\Temp\Resultat.xml"
    Application.TransformXML strSourceFile, strStylesheetfile, strResultFile
    Mais cela nécessite d'écrire une transformation XSLT (et de connaître la syntaxe xslt)
    Pour l'autre solution, Si vous n'ètes pas familier avec XMLDOM, Microsoft vous propose une introduction ==> http://msdn.microsoft.com/en-us/library/aa468547.aspx
    Je suis curieux de voir votre solution. Bonne chance.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour PipoWil,
    merci d'avoir pris le temps de regarder mon problème.
    Le fait que vous arriviez au même résultat que moi me rassure, je ne suis pas devenu fou...
    J'ai cherché à comprendre ce qui se passe dans l'import XML d'Access et le comportement est totalement anarchique, si on reste sur l'exemple précédent avec 2 objets EVENT et entre parenthèses le nombre d'elements:
    - 1er Cas : EVENT(13) + EVENT(13) => erreur 1 seule ligne
    - 2eme Cas : EVENT(12) + EVENT(14) => correct 2 lignes
    - 3eme Cas : EVENT(13) + EVENT(14) => correct 2 lignes
    - 4eme Cas : EVENT(17) + EVENT(2) => erreur 1 seule ligne

    Bref c'est n'importe quoi !

    Concernant le XSLT, mon fichier XML est déja une transformation par XSLT d'un fichier initial XML plus complexe qui contient plein d'attributs (qu'Access ne sait pas prendre pas en compte), j'ai donc malheureusement besoin de tous les objets contenus dans EVENT et chaque EVENT peut avoir un nombre d’éléments variables...
    Alors j'ai réussi avec un palliatif temporaire très très moche: créer lors de ma transformation XSLT un faux premier objet ELEMENT avec tous les types d'objets possibles à l'intérieur et avec des données vides et ça marche même si ça réduit fortement la flexibilité vu que je dois connaitre à priori tous les éléments possibles...

    Je ne connais pas du tout XMLDOM, je vais m'y mettre mais ça risque de prendre un moment...

    Merci encore pour votre aide.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,
    Le fait que vous ayez le même résultat que moi n'est pas une condition suffisante pour ne pas être fou.
    Peut-être le sommes nous tous les deux.
    Bonne chance avec DOMXL. Je vais voir si je peux vous trouver un exemple simple.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,

    Puis-je vous proposer de jetter un coup d'oeil à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Function Parse_XML_EVENT()
    'Lire un XML récalcitrant.
    'Nécessite la référence Microsoft XML v6.0 dans Tools/References
     
    Dim xmlDoc As DOMDocument
    Dim root As IXMLDOMElement
    Dim i As Integer
    Dim strFilename As String
     
    strFilename = "C:\Temp\XmlTest1.xml"
     
    Set xmlDoc = New DOMDocument
    xmlDoc.async = False
    xmlDoc.Load strFilename
    Set root = xmlDoc.documentElement
     
    'Voici le document XML que nous allons analyser:
    Debug.Print root.XML
     
    ParcoursEvent root
     
    Set root = Nothing
    Set xmlDoc = Nothing
     
    MsgBox ("Fini")
    End Function
    Function ParcoursEvent(root_node As IXMLDOMNode)
    'Dans Menu Tools/ references..., ajoutez Microsoft XML.
    'Voici un exemple qui affiche dans la fenêtre de débogage la liste des balises contenues dans un document xml.
     
    Dim i As Long
    Dim strNodeValue As String
     
     
    For i = 0 To root_node.childNodes.length - 1
        If root_node.childNodes.Item(i).nodeTypeString <> "element" Then
            strNodeValue = root_node.childNodes.Item(i).nodeValue
            strNodeValue = Replace(strNodeValue, Chr(10), "")
     
            Debug.Print root_node.parentNode.baseName, root_node.baseName, strNodeValue
     
        Else
            'Debug.Print root_node.baseName, "est un element :", root_node.nodeTypeString
        End If
     
        'Appel recursif de cette fonction
        ParcoursEvent root_node.childNodes(i)
    Next
     
    End Function
    où la seconde fonction fait un appel récursif à elle-même.

    Ceci devrait vous mettre sur la voie.
    Bonne chance.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    c'est l'absence d'id qui vous pose un problème.

    Dans la spécification XML il est recommandé de paramétrer chaque élément par un id de type hexa. Les dev d'access ont l'air de l'avoir interprété à leur manière et imposer un id de type numérique à l'import:

    ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <dataroot >
    <EVENT id="1">
    <A>A</A><B>B</B><C>C</C><D>D</D><E>E</E><F>F</F><G>G</G><H>H</H><I>I</I><J>J</J><K>K</K><L>L</L><M>M</M>
    </EVENT>
    <EVENT id="2">
    <N>N</N><O>O</O><P>P</P><Q>Q</Q><R>R</R><S>S</S><T>T</T><U>U</U><V>V</V><W>W</W><X>X</X><Y>Y</Y><Z>Z</Z>
    </EVENT>
    </dataroot>
    et ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="UTF-8"?>
    <dataroot >
    <EVENT id="1">
    <A>A</A><B>B</B><C>C</C><D>D</D><E>E</E><F>F</F><G>G</G><H>H</H><I>I</I><J>J</J><K>K</K><L>L</L>
    </EVENT>
    <EVENT id="2">
    <M>M</M><N>N</N><O>O</O><P>P</P><Q>Q</Q><R>R</R><S>S</S><T>T</T><U>U</U><V>V</V><W>W</W><X>X</X><Y>Y</Y><Z>Z</Z>
    </EVENT>
    </dataroot>
    donne le même résultat à l'importation.

    Et donc afin de ne pas être gêné il faudrait systématiquement apporter une transformation XSL à un fichier XML lors de l'import dans access pour ajouter le paramètre id. C'est la raison pour laquelle à mon sens est fourni la méthode transformxsl.

  7. #7
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Merci Benjîle

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    en respectant cela il est possible de faire de l'importation de bases entières avec relation parent/enfant en cascade.

  9. #9
    Candidat au Club
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    désolé du délai de réponse, j'ai du partir travailler sur un autre sujet. Merci pour votre aide Benjîle et Pipowil.
    Je vais adapter mon XSLT pour créer des id.

    Bon WE

Discussions similaires

  1. [AC-2007] Import XML dans base access
    Par marsupilami34 dans le forum Access
    Réponses: 2
    Dernier message: 09/09/2011, 18h28
  2. [AC-2002] Importation de XML dans access
    Par momo33 dans le forum Access
    Réponses: 3
    Dernier message: 20/06/2009, 23h35
  3. import de plusieurs fichiers XML dans Access 2003
    Par frdek dans le forum Access
    Réponses: 7
    Dernier message: 09/08/2008, 19h39
  4. Import XML dans Access
    Par migutz dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/05/2008, 15h31
  5. problème d'importation excel dans access
    Par Badboy62cfp dans le forum Access
    Réponses: 6
    Dernier message: 09/05/2006, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo