2008-10-21 4 views
3
나는 방법의 무수에서 XML을 처리하는 DOTNET 지금 많은 메커니즘이 있다는 것을 감사

...DotNet을 사용하여 XML 문자열에서 알려진 위치의 요소를 제거하는 가장 좋은 방법은 무엇입니까?

내가 XML을 포함하는 문자열이 있다고 가정 ....

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

은 무엇인가 Element1_1을 제거하는 가장 간단한 (가장 읽기 쉬운) 방법?

업데이트 ... 내가 닷넷 3.5에서 사용할 수있는 닷넷 API를 사용할 수 있습니다 : D API를 사용 할 수 있습니다

답변

7

? 예를 들어 .NET 3.5 및 LINQ for XML을 사용할 수 있습니까? 그렇다면 XNode.Remove은 친구입니다. LINQ to XML을 사용하면 여러 가지 방법으로 Element1_1을 선택하고 Remove()를 호출하면됩니다.

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

또는 : : 요소 선택하는 방법의

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

당신은 단순히 적절한 XPath는 주어진 "Element1_1을 선택"하는 방법을 명확히 수 : 더욱 구체적인

나. –

+0

XPathSelectElement 확장 메서드를 사용하여 Tomalak의 답변에 제공된 XPath 중 하나를 사용할 수 있습니다. –

+0

XMLDoc 구문에 비해 XDoc를 선호하기 때문에 Tomalak에서 승인되었습니다. 두 답을 모두지지했다. –

6

내가 사용하는 줄을 중 하나를이 :

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

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

또는 명시 적 XPath에와 동일 :

foreach (XmlNode xn in x.SelectNodes("/root/Element1/Element1_1")) 
    xn.ParentNode.RemoveChild(xn); 
XmlNode xn = x.SelectSingleNode("/root/Element1/Element1_1"); 
xn.ParentNode.RemoveChild(xn); 
관련 문제