2010-01-21 11 views
21
 // Remove element with ID of 1 
     var userIds = from user in document.Descendants("Id") 
         where user.Value == "1" 
         select user; 

     userIds.Remove(); 

     SaveAndDisplay(document); 

     // Add element back 
     var newElement = new XElement("Id", "0", 
      new XElement("Balance", "3000")); 
     document.Add(newElement); 

     SaveAndDisplay(document); 

अतिरिक्त तत्व बैक ब्लॉक समस्या है। जब यह जोड़ने के लिए मिलता है यह कहता है:"गलत तरीके से संरचित दस्तावेज़" त्रुटि से परहेज करते हुए, मैं किसी दस्तावेज़ में XElement कैसे जोड़ूं?

यह ऑपरेशन गलत तरीके से संरचित दस्तावेज़ बनाएगा।

मैं क्या बेवकूफ गलती कर रहा हूं?

संपादित करें:

हाँ, मैं एक XDocument, नहीं XElement के रूप में पढ़ रहा था। एक या दूसरे के पक्ष में कब कोई सलाह है?

+0

एक तरफ ध्यान दें पर, अपने 'newElement' वस्तु' Id' के एक बच्चे के रूप में 'Balance' नोड संग्रहीत करता है। यह आपकी अपेक्षित एक्सएमएल संरचना से मेल नहीं खाता है। –

+0

आप सही हैं, लेकिन आप एक्सएमएल संरचना को अनदेखा कर सकते हैं, मैंने सोचा कि यह आवश्यक था लेकिन मैं सचमुच कुछ भी जोड़ सकता हूं। – Finglas

उत्तर

38

ऐसा लगता है कि आप अपने दस्तावेज़ की जड़ के बच्चे के रूप में एक नया तत्व जोड़ने की कोशिश कर रहे हैं। यदि ऐसा है, तो आपको निम्नलिखित में अपना Add कथन बदलना होगा।

var newElement = new XElement("Id", "0", new XElement("Balanace", "3000")); 
document.Root.Add(newElement); 

दस्तावेज़ में सीधे जोड़ना एक और मूल तत्व जोड़ता है, जो एक्सएमएल संरचना का उल्लंघन करता है।

8

आप प्रभावी रूप से एक नया रूट तत्व जोड़ने की कोशिश कर रहे हैं, जो इन ऑब्जेक्ट्स को पसंद नहीं करते हैं। मुझे लगता है कि document एक एक्सडी दस्तावेज है? इसे रूट नोड में जोड़कर रूट नोड के अंदर आगे रखें। उपयोग:

document.Root.Add(newElement) या document.FirstNode.Add(newElement)

+0

और भी सही ढंग से: 'अगर (document.Root.FirstNode! = Null) document.Root.FirstNode.AddAfterSelf (newElement); अन्यथा दस्तावेज़। रूट। एडफर्स्ट (नया एलिमेंट); ' –

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