2008-10-21 4 views
3

Je sais qu'il ya maintenant de nombreux mécanismes dotnet pour faire face à XML dans une myriade de façons ...La meilleure façon de supprimer un élément à un emplacement connu d'une chaîne XML en utilisant DotNet?

Supposons que j'ai une chaîne contenant le XML ....

<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <Element1> 
     <Element1_1> 
      SomeData 
     </Element1_1> 
    </Element1> 
    <Element2> 
     Some More Data 
    </Element2> 
</root> 

Qu'est-ce le moyen le plus simple (le plus lisible) de supprimer Element1_1?

mise à jour ... Je peux utiliser une API .Net disponible en .Net 3.5: D

Répondre

7

Quelles API pouvez-vous utiliser? Pouvez-vous utiliser .NET 3.5 et LINQ to XML, par exemple? Si oui, XNode.Remove est votre ami - il suffit de sélectionner Element1_1 (de l'une des nombreuses façons qui sont faciles avec LINQ to XML) et appelez Remove() dessus.

Des exemples de la façon de sélectionner l'élément:

XElement element = doc.XPathSelectElement("/root/Element1/Element1_1"); 
element.Remove(); 

Ou:

XElement element = doc.Descendants("Element1_1").Single().Remove(); 
+0

Pourriez-vous préciser comment je pourrais « choisir Element1_1 » simplement donné une XPath appropriée. –

+0

Vous pouvez utiliser l'un des XPaths donnés dans la réponse de Tomalak, en utilisant la méthode d'extension XPathSelectElement. –

+0

Accepté sur Tomalak uniquement parce que je privilégie la syntaxe XDoc sur XMLDoc. Upvoted les deux réponses. –

6

j'utiliser soit ceci:

XmlDocument x = new XmlDocument(); 
x.LoadXml(SomeXmlString); 

foreach (XmlNode xn in x.SelectNodes("//Element1_1")) 
    xn.ParentNode.RemoveChild(xn); 

ou même avec un XPath explicite:

foreach (XmlNode xn in x.SelectNodes("/root/Element1/Element1_1")) 
    xn.ParentNode.RemoveChild(xn); 

ou, encore plus précis:

XmlNode xn = x.SelectSingleNode("/root/Element1/Element1_1"); 
xn.ParentNode.RemoveChild(xn);