LINQ pour XML, quelque chose le long des lignes de
XElement rootElem = ... //load this however you happen to
foreach (var component in rootElem.Elements("component"))
component.Save(your-XmlWriter-here); //you'll want a distinct writer per file
devrait fonctionner correctement; pour votre exemple spécifique ...
string xml [email protected]"
<components>
<component name='a'/>
<component name='b'/>
<component name='c'/>
</components>
";
foreach (XElement component in XElement.Parse(xml).Elements())
component.Save(component.Attribute("name").Value + ".xml");
fonctionne exactement comme spécifié. Cependant, je trouve que c'est une bonne pratique d'éviter de traiter des noms de fichiers spécifiques dans la mesure du possible, car souvent votre XML peut être traité directement plus tard dans le pipeline sans avoir besoin d'un fichier intermédiaire (lent et sujette aux erreurs). Par exemple, sur un serveur Web, il n'est pas évident que vous ayez des autorisations pour écrire quoi que ce soit, ce qui réduit la portabilité en forçant l'utilisation d'un fichier réel.