XML et noeud fils

Résolu
mastereur Messages postés 37 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 26 décembre 2010 - 30 avril 2009 à 16:04
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.

1 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
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);
        }
    }
}
3
Rejoignez-nous