Supprimer noeuds spécifiques XML

Résolu
Jojo092 Messages postés 136 Date d'inscription samedi 24 septembre 2005 Statut Membre Dernière intervention 12 avril 2013 - 1 févr. 2010 à 12:58
Jojo092 Messages postés 136 Date d'inscription samedi 24 septembre 2005 Statut Membre 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

5 réponses

Jojo092 Messages postés 136 Date d'inscription samedi 24 septembre 2005 Statut Membre Dernière intervention 12 avril 2013
2 févr. 2010 à 18:13
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.
3
cs_vikking Messages postés 24 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 19 avril 2011
2 févr. 2010 à 10:06
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
0
Jojo092 Messages postés 136 Date d'inscription samedi 24 septembre 2005 Statut Membre Dernière intervention 12 avril 2013
2 févr. 2010 à 10:56
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!!
0
cs_vikking Messages postés 24 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 19 avril 2011
2 févr. 2010 à 11:50
Ok , il ne te reste plus qu'à lire chaque noeud et vérifié qu'il n'est pas vide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jojo092 Messages postés 136 Date d'inscription samedi 24 septembre 2005 Statut Membre Dernière intervention 12 avril 2013
2 févr. 2010 à 13:42
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...
0
Rejoignez-nous