2012-11-22 2 views
0

Linq에를 사용하여 XML의 2 레벨 노드 I 다음과 같은 XML 파일이 있습니다액세스 XML

<tree> 
    <branchs> 
     <branch id=1> 
      <apple id=1 color=green/> 
      <apple id=2 color=red/> 
     </branch> 
     <branch id=2> 
      <apple id=1 color=green/> 
      <apple id=2 color=red/> 
     </branch> 
    </branchs> 
</tree> 

내가 지점 ID 1에서 사과 ID # 1에 대한 액세스에 SQL 명령을 좋아하고,보다 더 것을 (처음으로) 색상을 변경 한 다음이 지점에서이 사과를 제거 할 수 있습니다.

은 내가 사과를 제거하려면 다음을 시도했지만 어떤 결과

XDocument doc = XDocument.Load(myxmlFile); 
var result = (from selectedApples in 
       (from selectedBranch in doc.Element("Branchs").Elements("Branch) 
       where selectedBranch.Attribute("id").Value == 1 
       select selectedBranch) 
       where selectedApples.Attribute("id").Value == 1 
       select selectedApples).ToList(); 

result.ToList().ForEach(apple => apple.Remove()); 

없이 내가 너무 생각 나는 ... 용액으로부터 지금까지 아니에요 ... 내가 실수를 가정

어떤 도움이 필요합니까?

답변

0

최적화 된 솔루션인지 잘 모르겠지만 ... 작동 중입니다.

XDocument doc = XDocument.Load(myxmlFile); 
var results = from selectedApples in doc.Root.Element("branchs").Descendants() 
       where selectedApples.Attribute("id").Value == 1 
       select selectedApples.Elements("apple"); 

foreach(var result in results) 
    result.Where(a => a.Attribute("id").Value == 1).ToList().Foreach(a => a.Remove()); 

doce.Save(myxmlFile);