2011-02-15 21 views
6

Eşleşen özellik değerini temel alarak xml'deki herhangi bir öğeyi nasıl kaldırabilirim? Aşağıdaki LINQ sorgusu kullanıyorumLINQ: Özellik değerini temel alarak XML'den Öğeyi Kaldır?

<Projects> 
    <Project serverUrl="tcp://xyz1:xxx/sdfsdf.rem" projectName="project1" /> 
    <Project serverUrl="tcp://xyz2:xxx/sdfsdf.rem" projectName="project2" /> 
    <Project serverUrl="tcp://xyz3:xxx/sdfsdf.rem" projectName="project3" /> 
    <Project serverUrl="tcp://xyz4:xxx/sdfsdf.rem" projectName="project4" /> 
    <Project serverUrl="tcp://xyz5:xxx/sdfsdf.rem" projectName="project5" /> 
    <Project serverUrl="tcp://xyz6:xxx/sdfsdf.rem" projectName="project6" /> 
    </Projects> 

: Burada

benim XML

var remove = from elemet in xdoc.Elements("Projects").Elements("Project") 
           where elemet.Attribute("projectName").Value == "project1" 
           select elemet.Parent.Remove(); 

Ben derleme zamanı hatası alıyorum seçme olarak:

tipi select yan tümcesinde ifade yanlış

CEVAP DÜZENLEME: bu benim için çalışır. Teşekkür Tüm

var xElement = (from elemet in xdoc.Elements("Projects").Elements("Project") 
          where elemet.Attribute("projectName").Value == foundProject 
          select elemet); 
      xElement.Remove(); 

cevap

4

Aşağıdaki kod parçacığını kullanabilirsiniz:

xdoc.XPathSelectElement("Projects/Project[@projectName = 'project1']").Remove(); 
1

Remove() Bir XNode çağırıyoruz bir yöntemdir. Sorgunuz 'u seçmeye çalışmaktadır.

Gerçekte yapmak istediğiniz şey, kaldırmak istediğiniz öğeyi seçmek, ardından seçilen öğedeki Remove() yöntemini çağırmaktır. Burada bir örnek bulabilirsiniz: XNode.Remove Method

7

Sen

xdoc.Elements("Projects").Elements("Project").Where(
        elemet => elemet.Attribute("projectName").Value == "project1") 
.ToList().ForEach(i => i.Remove()); 

veya

(from elemet in xdoc.Elements("Projects").Elements("Project") 
          where elemet.Attribute("projectName").Value == "project1" 
          select elemet).ToList().ForEach(i => i.Remove()); 
9

Remove kullanabileceği bir (boşluk) yöntemi çağrısı değil, bir değer döndürebilir bir işlevdir.

var elementsToRemove = from elemet in xdoc.Elements("Projects").Elements("Project") 
         where elemet.Attribute("projectName").Value == "project1" 
         select elemet; 

foreach (var e in elementsToRemove) 
    e.Remove(); 

LINQ o dönüş şey için kullanılır (çoğunlukla) var, bir sorgu dildir: Muhtemelen böyle bir şey istiyorum. Bu öğeler üzerinde eylemleri gerçekleştirilmesi genellikle ayrı bir adımdır.

İlgili konular