Supprimer noeuds spécifiques XML [Résolu]

Jojo092 137 Messages postés samedi 24 septembre 2005Date d'inscription 12 avril 2013 Dernière intervention - 1 févr. 2010 à 12:58 - Dernière réponse : Jojo092 137 Messages postés samedi 24 septembre 2005Date d'inscription 12 avril 2013 Dernière intervention
- 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
Jojo092 137 Messages postés samedi 24 septembre 2005Date d'inscription 12 avril 2013 Dernière intervention - 2 févr. 2010 à 18:13
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.

Merci Jojo092 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de Jojo092
cs_vikking 24 Messages postés mercredi 4 juin 2008Date d'inscription 19 avril 2011 Dernière intervention - 2 févr. 2010 à 10:06
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
Jojo092 137 Messages postés samedi 24 septembre 2005Date d'inscription 12 avril 2013 Dernière intervention - 2 févr. 2010 à 10:56
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
cs_vikking 24 Messages postés mercredi 4 juin 2008Date d'inscription 19 avril 2011 Dernière intervention - 2 févr. 2010 à 11:50
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
Jojo092 137 Messages postés samedi 24 septembre 2005Date d'inscription 12 avril 2013 Dernière intervention - 2 févr. 2010 à 13:42
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.