Je pense que cela fait ce que vous êtes après:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main()
{
string xml = "<element1>hello<element2>there"
+ "</element2>my friend</element1>";
XElement element = XElement.Parse(xml);
List<XText> textNodes = element.DescendantNodes()
.OfType<XText>()
.ToList();
foreach (XText textNode in textNodes)
{
textNode.ReplaceWith (new XElement
("text", new XAttribute("value", textNode.Value)));
}
Console.WriteLine(element);
}
}
Il est possible que vous pourriez faire le remplacement dans la requête « en direct », mais je suis toujours méfiant de manipuler un document tout en l'itérant - je ne connais pas assez LINQ to XML pour être sûr que cela fonctionnerait. Copier toutes les références de nœuds de texte à une liste me semble d'abord plus sûr :)