2010-12-21 58 views
5

我有一個XML文件的XDocument刪除節點

<rows> 
    <head> 
    <beforeInit> 
     <call command="attachHeader"> 
     <param>#text_filter,#text_filter,#text_filter,#text_filter,#text_filter,#text_filter</param> 
     </call> 
    </beforeInit> 
    <afterInit> 
     <call command="enablePaging"> 
     <param>recinfoArea</param> 
     </call> 
    </afterInit> 
    <column width="100" align="center" type="ro" sort="server" color="undefined" id="Id">Id</column> 
    <column width="100" align="center" type="ro" sort="server" color="undefined" id="NazovProjektu">NazovProjektu</column> 
    </head> 
</rows> 

我想刪除beforeInit和afterInit元素。

我試圖

xml.Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove(); 

,但沒有運氣。

+0

如果我知道我不會問:-) – user137348 2010-12-21 15:02:36

回答

15

,如果你想刪除beforeInit的每一次出現或afterInit你可以使用

xml.Descendants().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove(); 

(後代,而不是元素)。 elements()返回直接子節點的列表,而後代返回每個節點。

+0

或簡稱:xml ... .First.Remove() – 2014-10-10 16:37:20

2

如果XML是一種的XElement,嘗試:

xml.Element("head").Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove(); 

否則,如果它是一個XDocument:

xml.Root.Element("head").Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove(); 

,現在是這樣的,它的成立,以尋找在<rows>子元素,而不是<head>。換句話說,Elements()只返回節點的直接子節點。如果你想要所有的後代,無論什麼級別,你都希望後代()。