আমি কীভাবে সি # তে বৈধ এক্সএমএল তৈরি করতে পারি?
আমি কীভাবে সি # তে বৈধ এক্সএমএল তৈরি করতে পারি?
উত্তর:
এটি দৃশ্যের উপর নির্ভর করে। XmlSerializer
অবশ্যই একটি উপায় এবং কোনও অবজেক্ট মডেলটিতে সরাসরি ম্যাপিংয়ের সুবিধা রয়েছে। নেট। 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
; এটি আরও আদিম (একবারে লেখার জন্য ফায়ার হুজ) তবে খুব দক্ষ (এখানে একটি বড় লুপের কল্পনা করুন):
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
)।
আমি যে চেষ্টা করেছি সবচেয়ে ভাল জিনিসটি হল লিনকিউ থেকে এক্সএসডি (যা বেশিরভাগ বিকাশকারীদের কাছে অজানা)। আপনি এটি একটি এক্সএসডি স্কিমা দিন এবং এটি ব্যাকগ্রাউন্ডে আপনার জন্য একটি দুর্দান্ত ম্যাপযুক্ত সম্পূর্ণ দৃ strongly়-টাইপযুক্ত অবজেক্ট মডেল (লিনকু থেকে এক্সএমএল ভিত্তিক) উত্পন্ন করে, যা এর সাথে কাজ করা সত্যই সহজ - এবং এটি আপনার অবজেক্ট মডেল এবং এক্সএমএলকে আপডেট এবং বৈধ করে তোলে প্রকৃত সময়. এটি এখনও "পূর্বরূপ" থাকা অবস্থায় আমি এর সাথে কোনও বাগের মুখোমুখি হইনি।
আপনার যদি এমন কোনও এক্সএসডি স্কিমা থাকে যা দেখতে এরকম দেখাচ্ছে:
<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>
তারপরে আপনি সহজেই এটির মতো এক্সএমএল তৈরি করতে পারেন:
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
এছাড়াও এক্সএলেমেন্ট আকারে উপাদানটি সরবরাহ করে (লিনকিউ থেকে এক্সএমএল পর্যন্ত)।
RootElement
এক্সএমএল রাইটার ভাল এক্সএমএল লেখার দ্রুততম উপায়। এক্সডোকামেন্ট, এক্সএমএল ডকুমেন্ট এবং অন্যান্য কিছু পাশাপাশি কাজ করে তবে এক্সএমএল লেখার জন্য অনুকূলিত হন না। আপনি যত তাড়াতাড়ি এক্সএমএল লিখতে চান তবে অবশ্যই আপনার এক্সএমএল রাইটার ব্যবহার করা উচিত।
অতীতে আমি আমার এক্সএমএল স্কিমা তৈরি করেছি, তারপরে সি # ক্লাস তৈরির জন্য একটি সরঞ্জাম ব্যবহার করেছি যা সেই স্কিমায় সিরিয়ালাইজ হবে। এক্সএমএল স্কিমা সংজ্ঞা সরঞ্জাম এর একটি উদাহরণ
http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx
আমি মনে করি এই সংস্থানটি একটি মাঝারি এক্সএমএল সেভ / লোডের জন্য যথেষ্ট হবে: সি # ব্যবহার করে এক্সএমএল পড়ুন / লিখুন ।
আমার কাজটি ছিল সংগীতের স্বরলিপি সংরক্ষণ করা। আমি এক্সএমএল বেছে নিন, কারণ আমি .NET কাজের জন্য সহজ সমাধান করার জন্য যথেষ্ট পরিণত হয়েছে। আমি সঠিক ছিলাম :)
এটি আমার গানের ফাইলের প্রোটোটাইপ:
<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);
}
}
}
}
}
সাধারণ জিনিসগুলির জন্য, আমি কেবল সিস্টেম.এক্সএমএলে পাওয়া এক্সএমএল ডকুমেন্ট / এক্সএমএলনোড / এক্সএমএলঅ্যাট্রিবিউট ক্লাস এবং এক্সএমএল ডকুমেন্ট ডিওএম ব্যবহার করি।
এটি আমার জন্য এক্সএমএল তৈরি করে, আমাকে কেবল কয়েকটি আইটেম একসাথে লিঙ্ক করা দরকার।
তবে বড় জিনিসগুলিতে আমি এক্সএমএল সিরিয়ালাইজেশন ব্যবহার করি।
সাধারণ ক্ষেত্রে, আমি এক্সএমএল আউটপুটকে এক্সএমএল তৈরির জন্য একটি সাবলীল ইন্টারফেসটি দেখার পরামর্শ দিই ।
বৈধ এক্সএমএল তৈরি করার সময়, এক্সএমএলআউটপুট পাঠযোগ্য ও রক্ষণাবেক্ষণযোগ্য কোড সহ সাধারণ এক্সএমএল তৈরির জন্য দুর্দান্ত। মূল পোস্টে কিছু মহান উদাহরণ রয়েছে।
যেমন উপরে.
আমি স্ট্রিংবিল্ডার.অ্যাপেন্ড () ব্যবহার করি।
খুব সোজা, এবং তারপরে আপনি xmldocament.load (প্যারামিটার হিসাবে স্ট্রিনবিল্ডার অবজেক্ট) করতে পারেন।
আপনি সম্ভবত পরিচ্ছেদের প্যারামিটারের মধ্যে স্ট্রিংকনক্যাট ব্যবহার করে দেখতে পাবেন তবে এটি একটি খুব সহজ পদ্ধতি।