XML et noeud fils [Résolu]

Messages postés
37
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
26 décembre 2010
- - Dernière réponse : mastereur
Messages postés
37
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
26 décembre 2010
- 4 mai 2009 à 12:13
Bonjours,

Comment puis je connaitre si on est sur le dernier noeud? Sachand que je fait une descente récursive dans un fichier xml totalement inconnu (ou presque)

Par exemple, ici, value est le dernier noeud de setting[@name='samFileName']
     
              <setting name="samFileName" serializeAs="String">
                <value>sam.xml</value>
              </setting>
   

J'ai tenté la fonction HasChilNodes mais cela me renvoie "true" pour value.
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
37
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
26 décembre 2010
3
Merci
Je pense avoir trouvé, je regarde si ce nœud fils contiens '#' ce qui correspond à une valeur différente d'une balise.

Voilà le code pour ceux que ça intéresse :
/// <summary>
/// On a en parametre le chemin XPath à partir du quel on veut commencé la récursivité
///
/// Cette fonction récursive va regarder si l'enfant à un noeud enfant
/// Si oui on fait la récursivité
/// sinon on enregistre l'item.
/// </summary>
///

///

internal static void ChargeOtherSettingsChild(string expChild, ListViewXml liste)
{
    #region defintion des données
    XmlDocument docFile = new XmlDocument();
    docFile.Load(GlobalVariable.fichierXml);

    XmlNode nodeChild;

    string[] verifExp = new string[GlobalVariable.MAX];
    string[] item = new string[GlobalVariable.MAX];

    #endregion defintion des données
    /* On passe en parametre la requete XPATH afin de commencé au bon endroit. */
    nodeChild = docFile.SelectSingleNode(expChild);

    //On va regarder si le noeud fils est une valeur ou non
    System.Text.RegularExpressions.Regex maRegexp = new System.Text.RegularExpressions.Regex("[#]");

    if (!nodeChild.HasChildNodes || maRegexp.IsMatch(nodeChild.FirstChild.LocalName))
    {
        // L'action que vous voulez faire au dernier fils
    }
    else
    {
        /* Pour chaque enfant on effectue cette fonction */
        for (int forNbSubChild = 0; forNbSubChild < nodeChild.ChildNodes.Count; forNbSubChild++)
        {
            /* On verifie que l'expression Xpath est correct */
            verifExp = expChild.Split(new char[] { ';' });
            string nextExp;
       
            /* on rajoute une indication pour reconnaitre le nom si on peux
             * généralement le 1° attribut est le nom
             */
            if (nodeChild.ChildNodes[forNbSubChild].Attributes.Count > 1)
                nextExp = expChild + "/" + nodeChild.ChildNodes[forNbSubChild].LocalName
                + "[@" + nodeChild.ChildNodes[forNbSubChild].Attributes[0].LocalName
                + "='" + nodeChild.ChildNodes[forNbSubChild].Attributes[0].InnerText
                + "']";
            else
            {
                nextExp = expChild + "/" + nodeChild.ChildNodes[forNbSubChild].LocalName;
            }
           
            /* On envoie en parametre le chemin puis le nom du noeud enfant */
            ChargeOtherSettingsChild(nextExp, liste);
        }
    }
}

Dire « Merci » 3

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

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mastereur