2011-08-09 17 views
5

, ben formun bir XDocument var: Linq XML aksi ya, ben eleman B. içerdiği tüm öğeler için xmlns kaldırmak istediğini kullanmaXDocument gelen xmlns özniteliği nasıl kaldırılır? Benim C# codebase

<A> 
<B> 
    <C xmlns='blabla' yz='blablaaa'> Hi </C> 
    <D xmlns='blabla' yz='blablaaa'> How </D> 
    <E xmlns='blabla' yz='blablaaa'> Are </E> 
    <F xmlns='blabla' yz='blablaaa'> You </F> 
</B> 
<B> 
    <C xmlns='blabla' yz='blablaaa'> I </C> 
    <D xmlns='blabla' yz='blablaaa'> am</D> 
    <E xmlns='blabla' yz='blablaaa'> fine</E> 
    <F xmlns='blabla' yz='blablaaa'> thanks</F> 
</B> 

metodoloji burada verilen kullanma: How to Remove specific attributes in XMLDocument?, benxmlns

hariç tüm niteliklerini kaldırmak başardı'xmlns' özelliğini XDocument'dan kaldırmanın en iyi yolu nedir?
+0

olası yinelenen [? C# ile XML tüm ad alanlarını nasıl kaldırılır] (http://stackoverflow.com/questions/987135/how-to -remove-all-namespaces-xml-ile-c) – BrokenGlass

+0

Neden istiyorsun? Bunlar normal nitelikler değil. Ad alanını tanımlarlar. –

+1

Bu bir kopya değil. Ve kabul edilen cevap 'olası' yinelemenin iddia ettiğiden çok daha temiz. – GilliVilla

cevap

11

Ad alanı bilgileri, XML belgesindeki XML belgesini XML'ye temsil eden nesne ağacında iki yerde tutulur: gerçek xmlns öznitelikleri ve öğelerin içinde Name s. Eğer iki yerden de kaldırırsanız gitmiş:

doc.Descendants() 
    .Attributes() 
    .Where(x => x.IsNamespaceDeclaration) 
    .Remove(); 

foreach (var elem in doc.Descendants()) 
    elem.Name = elem.Name.LocalName; 

çok özellikler arasından ad alanlarını kaldırmak istiyorsa

(. Yukarıdaki Bertrand Marron tarafından şimdi silinmiş cevap kopyalanır kodunun ilk kısmı), onların Name salt okunur çünkü, biraz daha karmaşıktır:

foreach (var attr in doc.Descendants().Attributes()) 
{ 
    var elem = attr.Parent; 
    attr.Remove(); 
    elem.Add(new XAttribute(attr.Name.LocalName, attr.Value)); 
} 
ait
+0

Yani aslında 'XmlDocument' sınıfının üyesi değil .Descendants() '. Tahminimce bu kod, OP tarafından sorulmayan XDocument sınıfı içindir. – supertopi

+0

@supertopi Soru, bu yanıtın kullandığı XML'e LINQ için açık bir şekilde sorulmuştur. Ama evet, bu 'XDocument' değil, XmlDocument 'anlamına gelir. – svick

+0

Tamam, başlık biraz yanıltıcı :) Bir değişiklik önereceğim – supertopi

İlgili konular