तो मेरा मामला यहाँ है।मैं एक स्ट्रिंग से XElement के तत्व को कैसे अपडेट/प्रतिस्थापित कर सकता हूं?
मेरे पास XElement है, चलिए इसे रूट कहते हैं, जिसमें वंशज हैं, जिनमें वंशज हैं, आदि। मैं LINQ से XML का उपयोग करके एक वंशज खींचता हूं, इसे .ToString()
का उपयोग करके एक ज्ञापन संपादक में लोड करता हूं और इसे संपादित करता हूं। अब मैं मूल संस्करण के साथ मूल संस्करण को अद्यतन/प्रतिस्थापित करना चाहता हूं।
मुझे बताएं कि यह एक साधारण XML फ़ाइल है, बिना स्कीमा के, डीओएम का उपयोग नहीं, आदि। मुझे केवल तत्व को संपादित और अपडेट/प्रतिस्थापित करने में सक्षम होना चाहिए।
<Root>
<Genre Name="Rock">
<Artist Name="Pink Floyd">
<BandMembers>
<Member>Nick Mason</Member>
<Member>Syd Barret</Member>
<Member>David Gilmour</Member>
<Member>Roger Water</Member>
<Member>Richard Wright</Member>
</BandMembers>
<Category>Favorite band of all time</Category>
</Artist>
<Artist Name="Led Zepelin">
<Category>Love the band</Category>
</Artist>
</Genre>
<Genre Name="Blues">
<Artist Name="Muddy Waters">
<Instrument>Harmonica</Instrument>
</Artist>
<Artist Name="Howling Wolf">
<Instrument>Guitar</Instrument>
</Artist>
</Genre>
</Root>
अब कहते हैं कि मैं रोजर वाटर्स के अंतिम नाम सही करने के लिए "पिंक फ्लोयड" तत्व संपादित करना चाहते हैं:
यहाँ मेरी एक्सएमएल एक mockup है। मुझे वह तत्व मिलता है, इसे एक स्ट्रिंग में परिवर्तित करें, इसे मेरे संपादक में लोड करें, जो परिवर्तन मैं चाहता हूं उसे बनाएं, और इसे .Parse()
का उपयोग करके XElement में परिवर्तित करें।
अब, मैं अपने मूल एक्सएमएल में "गुलाबी फ्लॉइड" नोड को कैसे अपडेट/प्रतिस्थापित कर सकता हूं?
// input would be your edited XML, this is just sample data to illustrate
string input = @"<Artist Name=""Pink Floyd"">
<BandMembers>
<Member>Nick Mason</Member>
<Member>Syd Barret</Member>
<Member>David Gilmour</Member>
<Member>Roger Waters</Member>
<Member>Richard Wright</Member>
</BandMembers>
<Category>Favorite band of all time</Category>
</Artist>";
var replacement = XElement.Parse(input);
var pinkFloyd = xml.Elements("Genre")
.Where(e => e.Attribute("Name").Value == "Rock")
.Elements("Artist")
.Single(e => e.Attribute("Name").Value == "Pink Floyd");
pinkFloyd.ReplaceWith(replacement);
Console.WriteLine(xml);
आप हालांकि कुछ त्रुटि जाँच जोड़ना चाहिए:
मैंने आपके एक्सएमएल को अपडेट किया क्योंकि उसके कुछ मेल खाने वाले नाम और गायब आइटम थे। यह एक वैध संरचना है लेकिन यह अभी भी पूरी तरह से संगत नहीं है, कलाकारों के साथ एक शैली के बाहर होने के साथ। –
मैंने ब्लूज़ टैग के अंदर मड्डी और हाउलिंग को रखने के लिए एक्सएमएल अपडेट किया। अब वे घर हैं! ;) –
pmartin
ओह! एक्सएमएल को मुक्त करने के लिए मुझे यही मिलता है। =) –