2013-06-26 3 views
1

내가 데이터베이스 ID = "3"을 삭제하려는 XDocument를 사용하여 데이터를 삭제하는 방법은 무엇입니까?

<DataBaseServers> 
    <DataBaseServer id="1" title="IISDevdb1" address="Address1"> 
    <DataBases>  
     <database id="1" name="db1" userID="u1" password="p1" /> 
     <database id="3" name="db3" userID="u3" password="p3" /> 
    </DataBases> 
    </DataBaseServer> 
    <DataBaseServer id="2" title="iis2" address="Address2"> 
    <DataBases>  
     <database id="2" name="db2" userID="u2" password="p2" />  
    </DataBases> 
    </DataBaseServer> 
</DataBaseServers> 

아래로 xml 파일이 있다고 가정. 나는 데이터베이스 ID = "2"를 삭제하면

결과 XML은

<DataBaseServers> 
    <DataBaseServer id="1" title="IISDevdb1" address="Address1"> 
    <DataBases>  
     <database id="1" name="db1" userID="u1" password="p1" />  
    </DataBases> 
    </DataBaseServer> 
    <DataBaseServer id="2" title="iis2" address="Address2"> 
    <DataBases>  
     <database id="2" name="db2" userID="u2" password="p2" />  
    </DataBases> 
</DataBaseServer> 
</DataBaseServers> 

될 것입니다, XML은 나는 그것이하여 XDocument를 사용하여 할 수있는 방법

<DataBaseServers> 
    <DataBaseServer id="1" title="IISDevdb1" address="Address1"> 
    <DataBases>  
     <database id="1" name="db1" userID="u1" password="p1" /> 
     <database id="3" name="db3" userID="u3" password="p3" /> 
    </DataBases> 
    </DataBaseServer> 
    <DataBaseServer id="2" title="iis2" address="Address2"/> 
</DataBaseServers> 

으로 볼 것인가?

답변

0

당신은하여 XDocument의 요소 목록을 반복하고 element.Remove(); method.as를 사용해야합니다 :

XDocument document = XDocument.Load(Server.MapPath(@"Doc\abc.xml")); ; 
     foreach (XElement element in document.Document.Descendants("database").ToList()) 
     { 
      if(element.Attribute("id").Value == Convert.ToString(3)) 
      element.Remove(); 
     } 
     document.Save(Server.MapPath(@"Doc\abc1.xml")); 

내가 그것을 가지고 Removing nodes from XDocument

+0

id = "3". 그럼 내가 어떻게 할 수 있니? –

+0

코드가 (있는 그대로) 전체 문서를 삭제하지 않습니까? – Tim

+0

실제로 데모 전용이었습니다. 이제 코드를 업데이트했습니다. 확인하십시오. –

0

확인을 참조하십시오 나는 데이터베이스를 삭제할

xdoc.Descendants("database") 
.Where(xa => xa.Attribute("id").Value == Convert.ToString(3)) 
.Remove(); 
+0

'Convert.ToString (3)'을 호출 할 필요가 없습니다. '(xa => xa.Attribute ("id"), Value == "3")'괜찮습니다. – Tim

+0

그러나 id가 "3"인 둘 이상의 "database"요소가있는 경우 모든 요소가 삭제됩니다. – Tim

관련 문제