2009-07-16 5 views

Répondre

4

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 :)