mastereur
Messages postés37Date d'inscriptionjeudi 17 mai 2007StatutMembreDernière intervention26 décembre 2010
-
30 avril 2009 à 16:04
mastereur
Messages postés37Date d'inscriptionjeudi 17 mai 2007StatutMembreDernière intervention26 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']
mastereur
Messages postés37Date d'inscriptionjeudi 17 mai 2007StatutMembreDernière intervention26 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);
}
}
}