Impossible de parser un XML
Bonjour,
Je suis novice dans la manipulation de fichiers XML.
Je cherche à récupérer des spécification d'import de fichier Excel sous Access.
Les spécifications d'import ne sont accessibles qu'en parcourant le modèle objet d'Access,et les spécifications d'import sont stockés dans un XML qui n'est pas consultable directement sous Access.
Afin de récupérer les information, j'ai utilisé le complément XML DOM et utilisé les fonctionnalités suivantes :
Code:
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
| Sub litfichierxml()
Dim nomfic As String
nomfic = "<répertoire/fichier.xml>"
BrowseXMLDocument filename:=nomfic
End Sub
Private Sub BrowseXMLDocument(ByVal filename As String)
Dim xmlDoc As DOMDocument, root As IXMLDOMElement
Set xmlDoc = New DOMDocument
xmlDoc.async = False
xmlDoc.Load filename
Set root = xmlDoc.documentElement
If Not root Is Nothing Then
Debug.Print root.baseName
BrowseChildNodes root
End If
End Sub
Private Sub BrowseChildNodes(root_node As IXMLDOMNode)
Dim i As Long
Dim attr As IXMLDOMAttribute
For i = 0 To root_node.childNodes.length - 1
If root_node.childNodes.Item(i).nodeType <> 3 Then Debug.Print root_node.childNodes.Item(i).baseName
For Each attr In root_node.childNodes.Item(i).Attributes
Debug.Print attr.baseName, attr.Text
Next attr
Debug.Print "-------------------------------------"
BrowseChildNodes root_node.childNodes(i)
Next
End Sub |
A noter que je ne suis pas arriver à lire le code XML (variable de type string) sans avoir à l'exporter dans un fichier.
Lorsque j'essaye de lire un fichier ... rien ne se passe ! ...
Afin de contrôler si le fichier exporté est correct, j'ai essayé de le charger sous Excel; là Excel trouve des anomalies.
Je vous joins un exemple de fichier XML que je dois analyser ;
Code:
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| <?xml version="1.0" encoding="utf-8" ?>
<ImportExportSpecification Path = "\\ntsparigi\Comarea\Infrastrutture\2. SUIVI\1. Base de données\1. Base de données ACCESS\Data\envois_DAOT_MEDDTL.xlsx" xmlns="urn:www.microsoft.com/office/access/imexspec">
<ImportExcel FirstRowHasNames="true" Destination="test_ECOMOUV - Suivi transmission DAOT au MEDDTL" Range="Feuil1$" >
<Columns PrimaryKey="N° Site">
<Column Name="Col1" FieldName="N° Site" Indexed="YESDUPLICATES" SkipColumn="false" DataType="Double" />
<Column Name="Col2" FieldName="Ancien numéro" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col3" FieldName="Type CA" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col4" FieldName="Nom du fichier transmis - 1er envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col5" FieldName="Date première transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col6" FieldName="Support première transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col7" FieldName="Date premier envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col8" FieldName="Date accusé réception premier envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col9" FieldName="Nom du fichier transmis - 2ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col10" FieldName="Date seconde transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col11" FieldName="Support seconde transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col12" FieldName="Date deuxième envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col13" FieldName="Date accusé réception deuxième envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col14" FieldName="Nom du fichier transmis - 3ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col15" FieldName="Date 3ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col16" FieldName="Support 3ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col17" FieldName="Date 3ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col18" FieldName="Date accusé réception 3ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col19" FieldName="Nom du fichier transmis - 4ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col20" FieldName="Date 4ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col21" FieldName="Support 4ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col22" FieldName="Date 4ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col23" FieldName="Date accusé réception 4ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col24" FieldName="Nom du fichier transmis - 5ème envoi" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col25" FieldName="Date 5ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col26" FieldName="Support 5ème transmission électronique" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col27" FieldName="Date 5ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col28" FieldName="Date accusé réception ème envoi papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col29" FieldName="Demande complément AOT - Nom fichier" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col30" FieldName="Demande complément AOT - Date tranmission électronique" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col31" FieldName="Demande complément AOT - Date tranmission papier" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col32" FieldName="Date commentaires n°1 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col33" FieldName="Commentaires n°1 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col34" FieldName="Commentaires n°1 transmis à SETEC ? (0/1)" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col35" FieldName="Date réponse commentaires n°1 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col36" FieldName="Réponse commentaires n°1 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col37" FieldName="Date commentaires n°2 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col38" FieldName="Commentaires n°2 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col39" FieldName="Commentaires n°2 transmis à SETEC ? (0/1)" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col40" FieldName="Date réponse commentaires n°2 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col41" FieldName="Réponse commentaires n°2 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col42" FieldName="Date commentaires n°3 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col43" FieldName="Commentaires n°3 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Memo" />
<Column Name="Col44" FieldName="Commentaires n°3 transmis à SETEC ? (0/1)" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col45" FieldName="Date réponse commentaires n°3 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col46" FieldName="Réponse commentaires n°3 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col47" FieldName="Date commentaires n°4 MEDDTL" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col48" FieldName="Commentaires n°4 MEDDTL" Indexed="NO" SkipColumn="false" DataType="Memo" />
<Column Name="Col49" FieldName="Champ49" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col50" FieldName="Date réponse commentaires n°4 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col51" FieldName="Réponse commentaires n°4 par ECOMOUV" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col52" FieldName="Date refus" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col53" FieldName="Motif refus" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col54" FieldName="Synthèse motif refus" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col55" FieldName="Réponse au refus" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col56" FieldName="Indice refus" Indexed="NO" SkipColumn="false" DataType="Double" />
<Column Name="Col57" FieldName="Date refus CAOT" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col58" FieldName="Motif refus CAOT" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col59" FieldName="Synthèse motif refus CAOT" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col60" FieldName="Réponse au refus CAOT" Indexed="NO" SkipColumn="false" DataType="DateTime" />
<Column Name="Col61" FieldName="Indice refus CAOT" Indexed="NO" SkipColumn="false" DataType="Text" />
</Columns>
</ImportExcel>
</ImportExportSpecification> |
Ce fichier refuse d'être parsé. J'en ai très vite conclu que la présence de caractères accentués était à l'origine de ce dysfonctionnement
Ceci est un fichier que j'ai manipulé (j'ai enlevé tous les caractères accentués), et qui fonctionne:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?xml version="1.0" encoding="utf-8" ?>
<ImportExportSpecification Path = "C:\Users\isabelle pierre\Documents\Jean-Yves DUMAS\Frontend local\Data\conducteurs_travaux.xlsx" xmlns="urn:www.microsoft.com/office/access/imexspec">
<ImportExcel FirstRowHasNames="true" Destination="test import table excel" Range="Referentiel$" >
<Columns PrimaryKey="ID_Etat">
<Column Name="Col1" FieldName="ID_Etat" Indexed="NO" SkipColumn="false" DataType="Double" />
<Column Name="Col2" FieldName="Type" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col3" FieldName="GV" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col4" FieldName="Region" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col5" FieldName="Dep" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col6" FieldName="Commune" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col7" FieldName="Statut" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col8" FieldName="Entreprise" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col9" FieldName="Conducteur de travaux" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col10" FieldName="email" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col11" FieldName="Mobile" Indexed="NO" SkipColumn="false" DataType="Text" />
<Column Name="Col12" FieldName="Ligne Fixe" Indexed="NO" SkipColumn="false" DataType="Text" />
</Columns>
</ImportExcel>
</ImportExportSpecification> |
Je souhaiterais m'affranchir de ce problème de caractère accentué. En lisant plusieurs article, je pense qu'une solution serait de passer par un encodage en utf-16. Une autre solution serait de remplacer les caractères accentués par des coaractères compatibles. J'ai essayé de les remplacer par les équivalents HTML (ex: é par é ), mais sans plus de succès.
Comment faire pour rendre ce code HTML parsable ?
Je précise que je n'ai pas la main sur l'en-tête Xml (notamment l'encodage, où il force l'encodage en utf-8
NB : J'ai posté aussi ce topic sur le forum VB6.