Supprimer noeuds spécifiques XML [Résolu]

Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Dernière intervention
12 avril 2013
- - Dernière réponse : Jojo092
Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Dernière intervention
12 avril 2013
- 2 févr. 2010 à 18:13
Bonjour,

je ne sais pas si le sujet a déjà été abordé, mais je n'ai pas trouvé de solution à mon problème. Bref, j'ai un fichier xml de ce type récupéré après une requête sur une base de donnée:
<Reproduction>
  <reproduction.reference>
    <reproduction.file>données</reproduction.file>
    <reference_number>données</reference_number>
    <reproduction_type>données</reproduction_type>
    données
  </reproduction.reference>
</Reproduction>
<Reproduction>
  <reproduction.reference>
    <reproduction.file/>
    <reproduction.file/>
    <reference_number/>
    <reproduction_type/>
    
  </reproduction.reference>
</Reproduction>
<Reproduction>
  ....
</reproduction>

Mon problème serait de supprimer le noeud complet <Reproduction> où les données sont vide pour obtenir un fichier xml qui n'aurait que des données remplies de ce type :
<Reproduction>
  ....
</Reproduction>
<Reproduction>
  ....
</reproduction>

A ce jour, je n'arrive qu'à obtenir un xml de ce type :
<Reproduction>
  ....
</Reproduction>
<Reproduction></Reproduction>
<Reproduction>
  ....
</reproduction>


Donc, est-ce-que quelqu'un aurait une idée sur comment supprimer complètement le noeud du xml ?

Merci beaucoup d'avance à ceux qui liront ce post et qui pourront m'apporter leur aide
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Dernière intervention
12 avril 2013
3
Merci
Bon j'ai réussi à trouver la solution que je vais poster, au cas où, ca intéresserait quelqu'un.

//On récupère toutes les nodes "Reproduction" 
XmlNodeList xmlNodeList = data.LastXml.GetElementsByTagName("Reproduction");

//On boucle sur la liste des nodes, on vérifie celles qui ne contiennent pas de données et on les supprime
//On réinitialise le compteur "i" puisque le nombre de noeuds de la liste a changé.
for (int i = 0; i < xmlNodeList.Count; i++)
{
    i = 0;
    if (string.IsNullOrEmpty(xmlNodeList[i].SelectSingleNode("reproduction.reference/reproduction.file").InnerXml))
    {
        xmlNodeList[i].ParentNode.RemoveChild(xmlNodeList[i]);                    
    }
}


Après, forcément, à vous de changer le nom des nodes sur lesquelles vous avez des traitements à faire.

En tout cas, merci à vikking pour m'avoir répondu et aidé.

Bonne fin d'après-midi à tout le monde.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de Jojo092
Messages postés
24
Date d'inscription
mercredi 4 juin 2008
Dernière intervention
19 avril 2011
0
Merci
Bonjour,
Tout d'abord quand veux tu que ce fichier soit filtrer sur les valeurs non nul ?

Lorsque tu le récupère le fichier XML,faut-il qu'il soit déjà filtrer ou non ?

Si oui il faut que tu affines ta requête SQL afin que les valeurs nuls ne soient pas inclus dans le résultat de ta requête.

Si non, une fois le fichier récupérer lit les valeurs dans chaque noeuds présent sous <reproduction.reference> et si elles sont nulles , ne prend pas en compte le noeuds.

Cordialement
Commenter la réponse de cs_vikking
Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Dernière intervention
12 avril 2013
0
Merci
Déjà merci pour ta réponse. En fait, c'est un peu particulier, parce que les recherches (donc les requêtes entre autres) se font à partir d'un exe que je ne peux pas modifier. Je récupère donc toutes les occurrences qu'elles soient vides ou non. D'où ma question,

Bonne journée!!
Commenter la réponse de Jojo092
Messages postés
24
Date d'inscription
mercredi 4 juin 2008
Dernière intervention
19 avril 2011
0
Merci
Ok , il ne te reste plus qu'à lire chaque noeud et vérifié qu'il n'est pas vide
Commenter la réponse de cs_vikking
Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Dernière intervention
12 avril 2013
0
Merci
Oui d'accord, c'est ce que je fais, mais quand je veux supprimer un noeud vide, j'aimerais supprimer toute la section, c'est à dire :

<Reproduction>
  ....
</Reproduction>
<Reproduction>
  ....
</reproduction>


et non pas :
<Reproduction>
  ....
</Reproduction>
<Reproduction></Reproduction>
<Reproduction>
  ....
</reproduction>


qui est ce que j'ai aujourd'hui...
Commenter la réponse de Jojo092

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.