2013-06-26 62 views
1

假設我有一個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"> 
    <DataBases>  
     <database id="2" name="db2" userID="u2" password="p2" />  
    </DataBases> 
    </DataBaseServer> 
</DataBaseServers> 

我想刪除數據庫ID = 「3」。

生成的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> 

如果我刪除數據庫ID = 「2」,XML將看起來

<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> 

它使用的XDocument我該怎麼辦?

回答

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

OK我知道了

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」的「數據庫」元素,它將刪除所有這些元素。 – Tim

相關問題