2010-12-21 15 views
5

ben beforeInit ve afterInit unsurları kaldırmak istediğiniz bir XML dosyasınıXDocument çıkarmadan düğümleri

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

var.

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

ama hiçbir şans çalıştı. xml bir XElement ise

+0

ben – user137348

cevap

15

Eğer beforeInit her oluşumunu silmek istiyor yoksa

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

(yerine elementlerin kökenini) de kullanabilir afterInit eğer. elements() doğrudan çocuk düğümlerinin bir listesini döndürürken, torunları her düğüme geri döner.

+0

Veya kısa formda :-) istemezdim bilirdiniz edin: xml ... .First.Remove() –

+2

'e.Name' aslında' e.Name.LocalName' olmalı mı? –

+0

@Stephan Schinkel Eğer BeforeInit varsa, tüm baş içeriğini nasıl kaldırabilirim? – Lutch

2

, deneyin:

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

Aksi halde, bunun XDocument ise:

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

Şimdiki durumda, <rows> alt elemanları aramaya ayarlanmış oluyor <head> değil. Başka bir deyişle, Elements() sadece bir düğümün doğrudan çocuklarını döndürür. Eğer tüm soyluları istiyorsan, hangi seviyede olursa olsun, Descendants'i() istiyorsun.