दिलचस्प पोस्ट
java.util.Date बनाम जावा.sql.Date जीआईटी में निर्दिष्ट प्रतिबद्धता को कैसे संशोधित करें? एक क्रिया निर्माता में Redux राज्य तक पहुंच रहा है? मैं एक नई सरणी के रूप में दो सरणियों के बीच का अंतर कैसे प्राप्त करूं? सॉर्ट () और रिवर्स () फ़ंक्शंस काम नहीं करते हैं आरजीबी हेक्स और हेक्स से आरजीबी तक एकाधिक सेट्स के चौराहे को खोजने का सर्वोत्तम तरीका? जावास्क्रिप्ट का उपयोग करते हुए DOM तत्व को कैसे बदलना है? बेस्ट जनरल एसवीएन अनदेखा पैटर्न? OSX पर डिफ़ॉल्ट के बजाय एमएएमपी के PHP का संस्करण कैसे उपयोग करें I कैसे mysqli में लेनदेन शुरू और अंत? पायथन सॉकेट डेटा की बड़ी मात्रा को प्राप्त करता है एंटीटी फ्रेमवर्क (.एएमएमएक्स मॉडल) और रेजर दृश्य && एकाधिक डेटाबेस में एक डाटाबेस रिकॉर्ड डालें, का उपयोग कर MVC3 के लिए एक ड्रॉपडाउन सूची बनाएं बैकअप स्क्रिप्ट के माध्यम से फ़ाइल को लॉग करने के लिए stdout की कॉपी पुनर्निर्देशित करें लूप में एक फ़ंक्शन कैसे काम करता है (जो दूसरी फ़ंक्शन देता है) काम करता है?

मैं सी # में XML कैसे बना सकता हूं?

मैं सी # में वैध XML कैसे बना सकता हूं?

वेब के समाधान से एकत्रित समाधान "मैं सी # में XML कैसे बना सकता हूं?"

यह परिदृश्य पर निर्भर करता है XmlSerializer निश्चित रूप से एक ही रास्ता है और सीधे ऑब्जेक्ट मॉडल के लिए मैपिंग का लाभ XmlSerializer है। .NET 3.5, XDocument , आदि में भी बहुत अनुकूल हैं। यदि आकार बहुत बड़ा है, तो XmlWriter आपका दोस्त है।

XDocument उदाहरण के लिए:

 Console.WriteLine( new XElement("Foo", new XAttribute("Bar", "some & value"), new XElement("Nested", "data"))); 

या XmlDocument साथ ही:

 XmlDocument doc = new XmlDocument(); XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Foo")); el.SetAttribute("Bar", "some & value"); el.AppendChild(doc.CreateElement("Nested")).InnerText = "data"; Console.WriteLine(doc.OuterXml); 

यदि आप डेटा की एक बड़ी धारा लिख ​​रहे हैं, तो किसी भी DOM दृष्टिकोण (जैसे XmlDocument / XDocument , आदि) जल्दी से बहुत सारी स्मृति ले जाएगा इसलिए यदि आप सीएसवी से 100 एमबी एक्सएमएल फ़ाइल लिख रहे हैं, तो आप एक्सएमएलआरमीटर पर विचार कर सकते हैं; यह अधिक आदिम (एक लिखने वाला फायरहाज) है, लेकिन बहुत ही कुशल (यहां एक बड़ी लूप की कल्पना करो):

 XmlWriter writer = XmlWriter.Create(Console.Out); writer.WriteStartElement("Foo"); writer.WriteAttributeString("Bar", "Some & value"); writer.WriteElementString("Nested", "data"); writer.WriteEndElement(); 

अंत में, XmlSerializer माध्यम से:

 [Serializable] public class Foo { [XmlAttribute] public string Bar { get; set; } public string Nested { get; set; } } ... Foo foo = new Foo { Bar = "some & value", Nested = "data" }; new XmlSerializer(typeof(Foo)).Serialize(Console.Out, foo); 

कक्षाओं के मानचित्रण के लिए यह एक अच्छा मॉडल है, आदि; हालांकि, यदि आप कुछ सरल कर रहे हैं (या यदि वांछित एक्सएमएल वास्तव में ऑब्जेक्ट मॉडल के लिए सीधा संबंध नहीं है) तो यह अधिक हो सकता है। XmlSerializer साथ एक और मुद्दा यह है कि यह अपरिवर्तनीय प्रकारों को क्रमबद्ध करने के लिए पसंद नहीं करता है: सब कुछ एक सार्वजनिक भक्षक और सेटर होना चाहिए (जब तक कि आप IXmlSerializable को कार्यान्वित करके इसे स्वयं नहीं करते हैं, उस स्थिति में आप XmlSerializer का उपयोग करके अधिक प्राप्त नहीं करते XmlSerializer )।

सबसे अच्छी बात यह है कि मैंने कोशिश की है LINQ को XSD (जो अधिकांश डेवलपर्स के लिए अज्ञात है)। आप इसे एक XSD स्कीमा देते हैं और पृष्ठभूमि में आपके लिए पूरी तरह से मैप किए गए पूर्ण दृढ़-टाइप ऑब्जेक्ट मॉडल (LINQ से XML पर आधारित) उत्पन्न करता है, जो वास्तव में काम करना आसान है – और यह आपके ऑब्जेक्ट मॉडल और XML को अपडेट करता है और मान्य करता है रियल टाइम। हालांकि यह अभी भी "पूर्वावलोकन" है, मैंने इसके साथ किसी भी बग का सामना नहीं किया है।

यदि आपके पास एक्सएसडी स्कीमा है जो इस तरह दिखती है:

  <xs:element name="RootElement"> <xs:complexType> <xs:sequence> <xs:element name="Element1" type="xs:string" /> <xs:element name="Element2" type="xs:string" /> </xs:sequence> <xs:attribute name="Attribute1" type="xs:integer" use="optional" /> <xs:attribute name="Attribute2" type="xs:boolean" use="required" /> </xs:complexType> </xs:element> 

तो आप बस इस तरह XML बना सकते हैं:

 RootElement rootElement = new RootElement; rootElement.Element1 = "Element1"; rootElement.Element2 = "Element2"; rootElement.Attribute1 = 5; rootElement.Attribute2 = true; 

या बस इस तरह से फ़ाइल से एक एक्सएमएल लोड:

 RootElement rootElement = RootElement.Load(filePath); 

या इसे इस तरह से सहेजें:

 rootElement.Save(string); rootElement.Save(textWriter); rootElement.Save(xmlWriter); 

rootElement.Untyped भी एक XElement के रूप में तत्व पैदा करता है (LINQ से XML)।

 new XElement("Foo", from s in nameValuePairList select new XElement("Bar", new XAttribute("SomeAttr", "SomeAttrValue"), new XElement("Name", s.Name), new XElement("Value", s.Value) ) ); 

मैं एक्सलिंग (पढ़ने के लिए: LINQ to XML) को एक कोशिश दे दूँगा यह आसान, सहज और आसानी से संपादन योग्य है।

नमूना: XLinq का इस्तेमाल करते हुए पढ़ना और लिखना XML

इसके अलावा मार्क एस। रासमुसेन के एक्सएमएलडीकास्टुअल फ्लुटर इंटरफ़ेस भी देखें , जो वास्तव में टाइप / एक्सएमएल आउटपुट को पढ़ने में आसान प्रदान करता है।

XmlWriter अच्छा XML लिखने का सबसे तेज़ तरीका है XDocument, XMLDocument और कुछ अन्य अच्छी तरह से अच्छा काम करते हैं, लेकिन XML लिखने के लिए अनुकूलित नहीं हैं यदि आप जितनी जल्दी हो सके एक्सएमएल को लिखना चाहते हैं, आपको निश्चित रूप से एक्सएमएलआरआरआईटर का इस्तेमाल करना चाहिए।

अतीत में मैंने अपनी XML स्कीमा बनाई है, फिर सी # क्लास उत्पन्न करने के लिए एक उपकरण का इस्तेमाल किया है जो उस स्कीमा को सीरियल कर देगा। एक्सएमएल स्कीमा परिभाषा उपकरण एक उदाहरण है

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

मुझे लगता है कि यह संसाधन एक मध्यम XML सहेज / लोड करने के लिए पर्याप्त होगा: सी # का उपयोग करके पढ़ें / लिखें XML

मेरा काम संगीत संकेतन संग्रह करना था मैं एक्सएमएल का चयन करता हूं, क्योंकि मुझे लगता है कि एनएटी ने कार्य के लिए आसान समाधान की अनुमति के लिए पर्याप्त परिपक्व किया है। मैं सही था 🙂

यह मेरा गीत फ़ाइल प्रोटोटाइप है:

 <music judul="Kupu-Kupu yang Lucu" pengarang="Ibu Sud" tempo="120" birama="4/4" nadadasar="1=F" biramapembilang="4" biramapenyebut="4"> <not angka="1" oktaf="0" naikturun="" nilai="1"/> <not angka="2" oktaf="0" naikturun="" nilai="0.5"/> <not angka="5" oktaf="1" naikturun="/" nilai="0.25"/> <not angka="2" oktaf="0" naikturun="\" nilai="0.125"/> <not angka="1" oktaf="0" naikturun="" nilai="0.0625"/> </music> 

यह काफी आसानी से हल किया जा सकता है:

फ़ाइल में सहेजें के लिए:

  private void saveToolStripMenuItem_Click(object sender, EventArgs e) { saveFileDialog1.Title = "Save Song File"; saveFileDialog1.Filter = "Song Files|*.xsong"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create); XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8); w.WriteStartDocument(); w.WriteStartElement("music"); w.WriteAttributeString("judul", Program.music.getTitle()); w.WriteAttributeString("pengarang", Program.music.getAuthor()); w.WriteAttributeString("tempo", Program.music.getTempo()+""); w.WriteAttributeString("birama", Program.music.getBirama()); w.WriteAttributeString("nadadasar", Program.music.getNadaDasar()); w.WriteAttributeString("biramapembilang", Program.music.getBiramaPembilang()+""); w.WriteAttributeString("biramapenyebut", Program.music.getBiramaPenyebut()+""); for (int i = 0; i < listNotasi.Count; i++) { CNot not = listNotasi[i]; w.WriteStartElement("not"); w.WriteAttributeString("angka", not.getNot() + ""); w.WriteAttributeString("oktaf", not.getOktaf() + ""); String naikturun=""; if(not.isTurunSetengah())naikturun="\\"; else if(not.isNaikSetengah())naikturun="/"; w.WriteAttributeString("naikturun",naikturun); w.WriteAttributeString("nilai", not.getNilaiNot()+""); w.WriteEndElement(); } w.WriteEndElement(); w.Flush(); fs.Close(); } } 

लोड फ़ाइल के लिए:

 openFileDialog1.Title = "Open Song File"; openFileDialog1.Filter = "Song Files|*.xsong"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open); XmlTextReader r = new XmlTextReader(fs); while (r.Read()) { if (r.NodeType == XmlNodeType.Element) { if (r.Name.ToLower().Equals("music")) { Program.music = new CMusic(r.GetAttribute("judul"), r.GetAttribute("pengarang"), r.GetAttribute("birama"), Convert.ToInt32(r.GetAttribute("tempo")), r.GetAttribute("nadadasar"), Convert.ToInt32(r.GetAttribute("biramapembilang")), Convert.ToInt32(r.GetAttribute("biramapenyebut"))); } else if (r.Name.ToLower().Equals("not")) { CNot not = new CNot(Convert.ToInt32(r.GetAttribute("angka")), Convert.ToInt32(r.GetAttribute("oktaf"))); if (r.GetAttribute("naikturun").Equals("/")) { not.setNaikSetengah(); } else if (r.GetAttribute("naikturun").Equals("\\")) { not.setTurunSetengah(); } not.setNilaiNot(Convert.ToSingle(r.GetAttribute("nilai"))); listNotasi.Add(not); } } else if (r.NodeType == XmlNodeType.Text) { Console.WriteLine("\tVALUE: " + r.Value); } } } } } 

सरल चीज़ों के लिए, मैं बस System.XML में XmlDocument / XmlNode / XmlAttribute वर्गों और XmlDocument DOM का उपयोग करता हूं।

यह मेरे लिए एक्सएमएल बनाता है, मुझे कुछ वस्तुओं को एक साथ जोड़ना होगा।

हालांकि, बड़ी चीज़ों पर, मैं XML सीरियलाइजेशन का उपयोग करता हूं।

सरल मामलों के लिए, मैं XmlOutput को XML के निर्माण के लिए एक धाराप्रवाह इंटरफ़ेस को देखने का सुझाव भी देता हूं।

मान्य एक्सएमएल उत्पन्न करते समय, XmlOutput पठनीय और रखरखाव के साथ सरल एक्सएमएल निर्माण के लिए महान है मूल पोस्ट में कुछ महान उदाहरण हैं

ऊपरोक्त अनुसार।

मैं स्ट्रिंगबिल्ल्डर का उपयोग करता हूं। Append ()

बहुत सीधा, और फिर आप xmldocument.load (पैरामीटर के रूप में strinbuilder वस्तु) कर सकते हैं।

आप शायद अपने आप को स्ट्रिंग का उपयोग कर लेंगे .concat एपेंड पैरामीटर के भीतर, लेकिन यह एक बहुत सरल दृष्टिकोण है।