البرمجة

قراءة بيانات XML باستخدام C# واستخراج القيم بدقة

في عملية قراءة البيانات من ملف XML في لغة البرمجة C#، يعتبر الخطوة الأولى هي تحليل الملف الذي يتم استرجاعه من خلال خدمة الويب. في الحالة الحالية، يمكننا أن نفترض أنك قد قمت بتنفيذ عملية الاتصال بالخدمة واسترجاعت XML ككائن من نوع XmlNode.

الآن، لنقم بعملية استخدام لغة C# لاستخراج القيم المطلوبة من هذا العنصر XML. يجب عليك استخدام مساحة الأسماء (Namespaces) للتحقق من التعامل مع العناصر بشكل صحيح. في هذا السياق، يوجد فضاء أسماء بعنوان “http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message“.

csharp
// تحديد مساحة الأسماء XmlNamespaceManager namespaceManager = new XmlNamespaceManager(new NameTable()); namespaceManager.AddNamespace("ns", "http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message"); // تحديد المسار للوصول إلى العنصر المستهدف string xpath = "//ns:Obs"; // استخراج العناصر المستهدفة XmlNodeList obsNodes = xmlNode.SelectNodes(xpath, namespaceManager); // الآن يمكنك الانتقال عبر العناصر المستخرجة واستخراج القيم المطلوبة foreach (XmlNode obsNode in obsNodes) { string timePeriod = obsNode.Attributes["TIME_PERIOD"].Value; string obsValue = obsNode.Attributes["OBS_VALUE"].Value; // يمكنك القيام بما تشاء بهذه القيم، سواء كان طباعتها أو استخدامها في مزيد من المعالجة Console.WriteLine($"TIME_PERIOD: {timePeriod}, OBS_VALUE: {obsValue}"); }

تتيح لك هذه القطعة من الكود استخدام مساحة الأسماء للتحقق من العناصر، ثم تحديد المسار (XPath) الذي يؤدي إلى العناصر التي تحتوي على القيم المطلوبة. بعد ذلك، يمكنك الانتقال عبر هذه العناصر واستخراج القيم من خلال الوصول إلى سماتها.

من الهام أن تتأكد من استخدام مسار (XPath) الصحيح وتحديد مساحة الأسماء بشكل صحيح لضمان نجاح عملية الاستخراج.

المزيد من المعلومات

بالطبع، سأوفر لك مزيد من المعلومات حول عملية قراءة البيانات من ملف XML في لغة البرمجة C#.

قد يكون لديك الحاجة أيضًا للتحقق من وجود فضاء أسماء آخر في العنصر الفعلي الذي تحتوي عليه البيانات المهمة. في هذه الحالة، يمكنك استخدام الكود التالي للتحقق من وجود فضاء أسماء إضافي:

csharp
// تحديد مساحات الأسماء الإضافية إذا كانت موجودة namespaceManager.AddNamespace("inegi", "urn:sdmx:org.sdmx.infomodel.keyfamily.KeyFamily=inegi:TIPO_B_DSD:compact"); // تحديد المسار للوصول إلى العنصر المستهدف string xpath = "//inegi:Obs"; // استخراج العناصر المستهدفة XmlNodeList obsNodes = xmlNode.SelectNodes(xpath, namespaceManager); // الآن يمكنك القيام بالتعامل مع العناصر واستخدام القيم المطلوبة كما في الكود السابق

في هذا الكود، تم إضافة مساحة أسماء إضافية (“inegi”) لضمان الوصول الصحيح إلى العناصر التي تنتمي إلى هذا الفضاء. يتيح لك ذلك تجاوز أي تعارض محتمل في مساحات الأسماء والوصول بشكل صحيح إلى البيانات.

علاوة على ذلك، يمكنك استخدام مكتبة System.Xml.Linq للتعامل مع XML بشكل أكثر راحة وعمق. يمكن تحقيق ذلك بواسطة تحويل XmlNode إلى XNode. قد يكون الكود التالي مفيدًا لتحقيق ذلك:

csharp
// تحويل XmlNode إلى XNode لمزيد من الراحة في التعامل XElement xmlElement = XElement.Load(new XmlNodeReader(xmlNode)); // الوصول إلى العنصر المستهدف باستخدام LINQ to XML var obsElement = xmlElement.Descendants("Obs").FirstOrDefault(); if (obsElement != null) { string timePeriod = obsElement.Attribute("TIME_PERIOD")?.Value; string obsValue = obsElement.Attribute("OBS_VALUE")?.Value; Console.WriteLine($"TIME_PERIOD: {timePeriod}, OBS_VALUE: {obsValue}"); }

هذا يوفر أسلوبًا أكثر حداثة للتعامل مع XML في C# باستخدام LINQ to XML.

زر الذهاب إلى الأعلى