Ciao
Una soluzione potrebbe consistere in una funzione ricorsiva. Ti scrivo il codice della funzione, è tutto commentato, ma se qualcosa non si capisce, prova a chiedere spiegazioni.
/// <summary>
/// Questa funzione ricorsiva elimina tutti i sottonodi
/// di un nodo che si trovano ad un livello specificato sotto di esso
/// </summary>
/// <param name="parent">Il nodo da cui rimuovere i sottonodi</param>
/// <param name="level">Il livello (in base 0) da cui troncare i sottonodi</param>
/// <param name="curLevel">Questo parametro viene utilizzato dalla funzione
/// ricorsiva per memorizzare il livello della gerarchia al quale è giunta.
/// Quando la chiami passa 0.</param>
private void DeleteSubNodes(XmlNode parent, int level, int curLevel)
{
//Se il livello è minore del livello al quale troncare
if (curLevel < level)
{
//Richiamo la funzione in modo ricorsivo per tutti i sottonodi
foreach (XmlNode subNode in parent.ChildNodes)
{
//Naturalmente il livello della gerarchia aumenta di 1
//(curLevel + 1)
DeleteSubNodes(subNode, level, curLevel + 1);
}
}
//Se invece il livello è uguale a quello indicato
else if (curLevel == level)
{
//Elimino tutti i sottonodi
while (parent.HasChildNodes)
{
parent.RemoveChild(parent.ChildNodes[0]);
}
}
}
Se passare 0 come terzo argomento ti risulta scomodo, puoi creare una funzione di supporto:
private void DeleteSubNodes(XmlNode parent, int level)
{
DeleteSubNodes(parent, level, 0);
}
E stessa cosa per lavorare con un XmlDocument invece che coi singoli nodi:
private void DeleteSubNodes(XmlDocument document, int level)
{
//Chiama la funzione per ciascuno dei sottonodi
foreach (XmlNode childNode in document.ChildNodes)
{
DeleteSubNodes(childNode, level);
}
}
Ti ricordo infine solo che il livello da cui troncare va specificato in base 0, quindi il tuo esempio va inteso così:
<folder name="uno"> (LIVELLO 0)
<folder name="a"> (LIVELLO 1)
<folder name="Nuova cartella" /> (LIVELLO 2)
<folder name="Nuova cartella (2)" />
</folder>
<folder name="b"> (LIVELLO 1)
<folder name="Nuova cartella" /> (LIVELLO 2)
<folder name="Nuova cartella (2)" />
</folder>
</folder>
e devi tagliare al livello 1
Luca