2011-02-15 16 views
6

मिलान किए गए विशेषता मान के आधार पर मैं XML में किसी भी तत्व को कैसे हटा सकता हूं?LINQ: विशेषता मान के आधार पर XML से एलिमेंट निकालें?

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

मैं निम्नलिखित LINQ क्वेरी का उपयोग कर रहा:

यहाँ मेरी एक्सएमएल है

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

मैं पर टाइम त्रुटि संकलन हो रही है का चयन के रूप में:

के प्रकार चुनिंदा खंड में अभिव्यक्ति गलत है

उत्तर संपादित करें: यह मेरे लिए काम करता है। धन्यवाद सभी

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

उत्तर

4

आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

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

Remove() एक तरीका आपकी एक XNode पर कहते हैं। आपकी क्वेरी का उपयोग करने की कोशिश कर रही है जो कोई समझ नहीं आता है।

आप वास्तव में क्या करना चाहते हैं वह आइटम चुनें जिसे आप निकालना चाहते हैं, फिर चयनित आइटम पर निकालें() विधि को कॉल करें। आप एक उदाहरण यहां पा सकते हैं: XNode.Remove Method

7

आप

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

या

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

Remove इस्तेमाल कर सकते हैं एक (शून्य) विधि कॉल, नहीं एक समारोह है कि एक मूल्य लौट सकते है।

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, एक क्वेरी भाषा है यह (मुख्य रूप से) है वापसी कुछ के लिए इस्तेमाल किया: आप शायद कुछ इस तरह करना चाहते हैं। इन तत्वों पर क्रिया निष्पादित करना आमतौर पर एक अलग चरण होता है।

संबंधित मुद्दे