2017-02-13 113 views
4

我有一個xml文件,只有特定的節點必須被刪除。節點名稱將作爲用戶的輸入。如何刪除用戶請求的特定節點?刪除xml節點-Xelement

<Customers>  
    <Customer>  
    <id>michle</id> 
    <address>newjersy</address>  
    </Customer>  
    <Customer>  
    <id>ann</id> 
    <address>canada</address>  
    </Customer> 
</Customers> 

我已經試過

var customer = new XElement("customer", 
     from o in customers 
     select 
      new XElement("id", id), 
      new XElement("address", address) 
     ); 

客戶將包含一個新的節點

<Customer>  
    <id>ann</id> 
    <address>canada</address>  
</Customer> 

doc.Element("customers").Elements(customer).ToList().Remove();

,但是這是行不通的。我怎樣才能從XML中刪除元素?

+0

沒有。我得到編譯時錯誤。客戶是不允許的變量看起來 –

回答

2

湯姆,

嘗試......

private static void RemoveNode(string sID) 
    { 
     XDocument doc = XDocument.Load(@"D:\\Projects\\RemoveNode.xml"); 

     var v = from n in doc.Descendants("Customer") 
        where n.Element("id").Value == sID 
        select n; 
     v.Remove(); 
     doc.Save(@"D:\\Projects\\RemoveNode.xml"); 
    } 

這取出一個節點,當我使用

RemoveNode("michle"); 

希望這有助於說法。

1

您的主要錯誤是您正在創建未附加在源文檔中的新節點,而不是從中檢索已存在的節點。

您可以使用MSDN上的文章"Removing Elements, Attributes, and Nodes from an XML Tree"作爲操作XML數據的指南。

例如,使用XNode.Remove()方法刪除從樹中的一個節點或Extensions.Remove<T>(this IEnumerable<T> source) where T : XNode刪除每個節點的節點的源集合中:

doc.Descendants("Customer") 
    .Where(x => x.Element("id").Value == id) 
    .Remove(); 

但你還需要以後,對於通過Save方法保存文檔提交您的更改:

doc.Save(); 
+0

獲取錯誤錯誤\t'System.Xml.Linq.XElement'不包含'RemoveChild'的定義,也沒有接受類型爲'System'的第一個參數的擴展方法'RemoveChild'。 Xml.Linq.XElement'可以找到(你是否缺少使用指令或程序集引用?) –

+0

當我嘗試customer.remove(),返回的父錯誤返回錯誤 –

+0

@TomCruise yeap,因爲你正在創建新的節點,而不是從xml中恢復它。詳情請參閱最後一個鏈接。 –

0

您可以刪除基於這樣的id

 xdoc.Descendants("Customer") 
     .Where(x => (string)x.Element("id") == "michle") 
     .Remove();