Pb de lecture de fichier XML avec Balise Vide [Résolu]

Signaler
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
-
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
-
Si quelqu'un connait la
solution ?







Je suis novice sur le XML.
Les deux premières lignes
passe car « non vide » par contre ça plante à la balise
"PREPARATEUR"
J’ai essayé des if =true ou
length=0 ça plante toujours.
            'Ouverture du fichier
XML







Dim


XDoc AsNew XmlDocument
XDoc.Load(fichier)







            ‘Lecture des
données







Dim


Path AsString =
"CAZELLE/CAZELLE_CONFIGURATION/PROJET/"







            Me.NomProjet =
(XDoc.SelectSingleNode(Path &
"NOM_PROJET").FirstChild.InnerText())







            Me.Designation =
(XDoc.SelectSingleNode(Path &
"DESIGNATION").FirstChild.InnerText())












Me


.NomPreparateur =
(XDoc.SelectSingleNode(Path &
"PREPARATEUR").FirstChild.InnerText())








 








‘Structure de
mon fichier xml







<?xml version="1.0"
encoding="UTF-8"?>







<CAZELLE>







     
<CAZELLE_CONFIGURATION>







           







                 
<NOM_PROJET>TESTXML</NOM_PROJET>







                 
<DESIGNATION>Essais Ecriture
XML</DESIGNATION>







                 










                 
<STL></STL>







                 







                 
<GROUPAGE></GROUPAGE>







                 
<TO_GROUPAGE></TO_GROUPAGE>







                 
<NOTE></NOTE>







                 








                 
<DATE></DATE>







                 
<MODIFICATION></MODIFICATION>







           







     
</CAZELLE_CONFIGURATION>












</CAZELLE>









Caussenard

4 réponses

Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
1
Le .Value ne marchait pas systematiquement (d'ailleur si quelqu'un veut m'expliquer car j'avance à taton sans forcement comprendre)
En revanche la methode Length semble plus fiable.

XDoc.SelectSingleNode(Path & "NOM_PROJET").InnerText.Length <> "0" Then Me.NomProjet = (XDoc.SelectSingleNode(Path & "NOM_PROJET").InnerText())

Caussenard
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Tu dois pourvoir remplacer FirstChild.InnerText par Text




Renfield





Admin CodeS-SourceS

- MVP Visual Basic
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
1
Apparament ça ne marche pas j'ai le message suivant:
 'Text' n'est pas un membre de 'System.Xml.XmlNode'.

J'ai oublier de preciser j'ai les imports suivant:
Imports System.Xml
Imports System.Xml.XPath

Caussenard
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
1
Je viens de trouver une solution en faisant un if sur le .value au lieu du .Innertext
            Si la valeur de l'element est differente de "" (rien) je fait ma lecture
            If XDoc.SelectSingleNode(Path & "NOM_PROJET").Value <> "" Then Me.NomProjet = (XDoc.SelectSingleNode(Path & "NOM_PROJET").FirstChild.InnerText())
            If XDoc.SelectSingleNode(Path & "DESIGNATION").Value <> "" Then Me.Designation = (XDoc.SelectSingleNode(Path & "DESIGNATION").FirstChild.InnerText())
            If XDoc.SelectSingleNode(Path & "PREPARATEUR").Value <> "" Then Me.NomPreparateur = (XDoc.SelectSingleNode(Path & "PREPARATEUR").FirstChild.InnerText())

Il doit exister plus simple mais ça a le mérite de marcher.          
Caussenard