2011-02-16 2 views
2

저는 chem4word 프로젝트의 일부를 C#에서 AS3으로 번역하고 있습니다.C#/Linq는 XElement.Remove()가 호출 된 후 XElement를 XElement에 추가 할 수 있습니까?

아래 코드에서 XElement DelegateElementRemove() 메서드를 호출합니다. mark == true이면 을 전달하면 XAttribute "deleted" = "true"이되지만 노드가 제거 된 경우 실제로 C#/Linq는 무엇을합니까?

 private XElement DelegateElement; 

     public void DeleteSimple(bool mark) 
     { 
      if (IsDeleted()) 
      { 
       Log.Debug("WARN: Trying to delete previously deleted CMLElement " + GetTag()); 
      } 
      else 
      { 
       if (this.DelegateElement.Parent != null) 
       { 
        /////////////////////////////////////////// 
        // Here, if the XElement is being removed, 
        // where does the MarkAsDeleted method add 
        // the XAttribute? 
        //////////////////////////////////////////// 
        this.DelegateElement.Remove(); 
        if (mark) 
        { 
         MarkAsDeleted(this.DelegateElement); 
        } 
       } 
      } 
     } 


     private void MarkAsDeleted(XElement delegateElement) 
     { 
      // Deleted = "deleted; True = "true" 
      delegateElement.Add(new XAttribute(Deleted, True)); 
     } 

단지 '재미'에 대한 코드는 as3 버전입니다. 위의 C# 방식에 따라 삭제 된 노드는 xml에 추가 된 새 속성 (또는 새 정보)을 가져 오지 않습니다.

 private var DelegateElement:XML; 
     public function DeleteSimple(mark:Boolean):void 
     { 
      if(IsDeleted()) 
      { 
       // log output 
      } 
      else 
      { 
       if(this.DelegateElement.parent() != null) 
       { 
        delete this.DelegateElement.parent().children()[this.DelegateElement.childIndex()]; 
        if(mark) 
        { 
         MarkAsDeleted(this.DelegateElement); 
        } 
       } 
      } 
     } 

     private function MarkAsDeleted(delegateElement:XML):void 
     { 
      delegateElement['@'+Deleted] = True; 
     } 

답변

2

Remove()을 호출하면 해당 요소가 상위 요소에서 꺼내집니다.
요소 자체는 계속 정상적으로 작동합니다.

+0

신난다, 나는 단지 senario를 완전히 생각하지 않았다. as3에서 테스트했는데, 마치 당신이 말하는 것처럼 작동하는 것 같습니다. 무리 감사! – gltovar

관련 문제