Pb de lecture de fichier XML avec Balise Vide

Résolu
cs_Caussenard
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
- 10 oct. 2007 à 11:09
cs_Caussenard
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
- 10 oct. 2007 à 17:18
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

cs_Caussenard
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
1
10 oct. 2007 à 17:18
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
3
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
10 oct. 2007 à 13:51
Tu dois pourvoir remplacer FirstChild.InnerText par Text




Renfield





Admin CodeS-SourceS

- MVP Visual Basic
0
cs_Caussenard
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
1
10 oct. 2007 à 14:00
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
0
cs_Caussenard
Messages postés
28
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
8 juillet 2008
1
10 oct. 2007 à 14:33
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
0