كيفية تحليل XML في C ++

How Parse Xml C



في هذه المقالة ، سنناقش كيفية تحليل XML في لغة البرمجة C ++. سنرى العديد من الأمثلة العملية لفهم آلية تحليل XML في C ++.

ما هو XML؟

XML هي لغة ترميز وتستخدم بشكل أساسي لتخزين ونقل البيانات بطريقة منظمة. XML تعني لغة التوصيف الموسعة. إنه مشابه جدًا لـ HTML. يركز XML تمامًا على تخزين البيانات ونقلها ، بينما يتم استخدام HTML لعرض البيانات على المتصفح.







نموذج ملف XML / بناء جملة XML

فيما يلي نموذج لملف XML:



إصدار='1.0' التشفير='utf-8'؟>

>

نوع_الطالب='دوام جزئى'>

>توم>

>

نوع_الطالب='وقت كامل'>

>دريك>

>

>

على عكس HTML ، فهي لغة ترميز موجهة نحو العلامات ، ويمكننا تحديد علامتنا الخاصة في ملف XML. في المثال أعلاه ، لدينا العديد من العلامات المعرفة من قبل المستخدم مثل. كل علامة سيكون لها علامة النهاية المقابلة. هي علامة النهاية لـ. يمكننا تحديد العديد من العلامات المعرفة من قبل المستخدم كما نريد لتنظيم البيانات.



تحليل المكتبات في C ++:

هناك العديد من المكتبات لتحليل بيانات XML في معظم لغات البرمجة عالية المستوى. C ++ ليست استثناء. فيما يلي مكتبات C ++ الأكثر شيوعًا لتحليل بيانات XML:





  1. RapidXML
  2. بوجيكمل
  3. TinyXML

كما يوحي الاسم ، فإن RapidXML يركز بشكل أساسي على السرعة ، وهو عبارة عن مكتبة تحليل نمط DOM. يدعم PugiXML تحويل Unicode. قد ترغب في استخدام PugiXML إذا كنت تريد تحويل مستند UTF-16 إلى UTF-8. TinyXML هو إصدار بسيط لتحليل بيانات XML وليس بهذه السرعة مقارنة بالإصدارين السابقين. إذا كنت ترغب في إنجاز المهمة فقط ولا تهتم بالسرعة ، يمكنك اختيار TinyXML.

أمثلة
الآن ، لدينا فهم أساسي لمكتبات تحليل XML و XML في C ++. دعنا الآن نلقي نظرة على بعض الأمثلة لتحليل ملف xml في C ++:



  • مثال 1: تحليل XML في C ++ باستخدام RapidXML
  • مثال 2: تحليل XML في C ++ باستخدام PugiXML
  • مثال 3: تحليل XML في C ++ باستخدام TinyXML

في كل من هذه الأمثلة ، سنستخدم المكتبات المعنية لتحليل عينة ملف XML.

مثال 1: تحليل XML في C ++ باستخدام RapidXML

في هذا المثال البرنامج ، سنشرح كيفية تحليل xml باستخدام مكتبة RapidXML في C ++. إليك ملف XML للإدخال (sample.xml):

إصدار='1.0' التشفير='utf-8'؟>

>

نوع_الطالب='دوام جزئى'>

>يوحنا>

>

نوع_الطالب='وقت كامل'>

>شون>

>

نوع_الطالب='دوام جزئى'>

>ساره>

>

>

هدفنا هنا هو تحليل ملف XML أعلاه باستخدام C ++. هنا هو برنامج C ++ لتحليل بيانات XML باستخدام RapidXML. يمكنك تنزيل مكتبة RapidXML من هنا .

#يشمل
#يشمل
#يشمل
# تضمين 'Rapidxml.hpp'

استخدام مساحة الاسمساعات؛
استخدام مساحة الاسمرابيدكسمل؛


xml_documentوثيقة
xml_node *عقدة الجذر= باطل؛

intالأساسية(فارغ)
{
كلفة << 'نتحليل بيانات طلابي (sample.xml) ..... ' <<endl؛

// اقرأ ملف sample.xml
ifstream الملف('sample.xml')؛
المتجه<شار>متعادل((istreambuf_iterator<شار>(الملف))، istreambuf_iterator<شار>())؛
متعادل.إدفع إلى الخلف(' 0')؛

// تحليل المخزن المؤقت
وثيقة.تحليل<0>(&متعادل[0])؛

// اكتشف عقدة الجذر
عقدة الجذر=وثيقة.first_node('بيانات MyStudents')؛

// كرر عبر عقد الطالب
ل (xml_node *Student_node=عقدة الجذر->first_node('طالب')؛Student_node؛Student_node=Student_node->الشقيق التالي())
{
كلفة << 'ننوع الطالب = ' <<Student_node->السمة_الأولى('نوع_طالب')->القيمة()؛
كلفة <<endl؛

// Interate على أسماء الطلاب
ل(xml_node *student_name_node=Student_node->first_node('اسم')؛student_name_node؛student_name_node=student_name_node->الشقيق التالي())
{
كلفة << 'اسم الطالب =' <<student_name_node->القيمة()؛
كلفة <<endl؛
}
كلفة <<endl؛
}

إرجاع 0؛
}

مثال 2: تحليل XML في C ++ باستخدام PugiXML

في مثال البرنامج هذا ، سنشرح كيفية تحليل xml باستخدام مكتبة PugiXML في C ++. إليك ملف XML للإدخال (sample.xml):

إصدار='1.0' التشفير='UTF-8' قائمة بذاتها='لا' ؟>

FormatVersion='1'>

>

اسم='يوحنا' نوع='دوام جزئى'>

>

اسم='شون' نوع='وقت كامل'>

>

اسم='ساره' نوع='دوام جزئى'>

>

>

>

في هذا المثال البرنامج ، سنشرح كيفية تحليل xml باستخدام مكتبة pugixml في C ++. يمكنك تنزيل مكتبة PugiXML من هنا .

#يشمل
# تضمين 'pugixml.hpp'

استخدام مساحة الاسمساعات؛
استخدام مساحة الاسمبوجي؛

intالأساسية()
{
كلفة << 'نتحليل بيانات الموظفين (sample.xml) .....نن'؛


xml_document doc؛

// تحميل ملف XML
لو (!وثيقة.تحميل الملف('sample.xml')) إرجاع -1؛

أدوات xml_node=وثيقة.طفل('بيانات الموظفين').طفل('الموظفين')؛


ل (xml_node_iterator ذلك=أدوات.يبدأ()؛هو - هي!=أدوات.نهاية()؛ ++هو - هي)
{
كلفة << 'الموظفين:'؛

ل (xml_attribute_iterator ait=هو - هي->السمات_البدء()؛الانتماء!=هو - هي->الصفات_النهاية()؛ ++الانتماء)
{
كلفة << ' <<الانتماء->اسم() << '=' <<الانتماء->القيمة()؛
}

كلفة <<endl؛
}

كلفة <<endl؛

إرجاع 0؛

}

مثال 3: تحليل XML في C ++ باستخدام TinyXML

في مثال هذا البرنامج ، سنشرح كيفية تحليل xml باستخدام مكتبة TinyXML في C ++. إليك ملف XML للإدخال (sample.xml):

إصدار='1.0' التشفير='utf-8'؟>

>

>يوحنا>

>شون>

>ساره>

>

في مثال هذا البرنامج ، سنشرح كيفية تحليل xml باستخدام مكتبة TinyXML في C ++. يمكنك تنزيل مكتبة TinyXML من هنا .

#يشمل
#يشمل
#يشمل
#include 'tinyxml2.cpp'

استخدام مساحة الاسمساعات؛
استخدام مساحة الاسمtinyxml2؛


intالأساسية(فارغ)
{
كلفة << 'نتحليل بيانات طلابي (sample.xml) ..... ' <<endl؛

// اقرأ ملف sample.xml
XMLDocument doc؛
وثيقة.تحميل الملف( 'sample.xml' )؛

مقدار ثابت شار*لقب=وثيقة.FirstChildElement( 'بيانات MyStudents' )->FirstChildElement( 'طالب' )->الحصول على النص()؛
printf( اسم الطالب:٪ sن'، لقب)؛


XMLText*عقدة النص=وثيقة.LastChildElement( 'بيانات MyStudents' )->LastChildElement( 'طالب' )->FirstChild()->للنص()؛
لقب=عقدة النص->قيمة()؛
printf( اسم الطالب:٪ sن'، لقب)؛


إرجاع 0؛
}

استنتاج

في هذه المقالة ، ناقشنا بإيجاز XML ونظر في ثلاثة أمثلة مختلفة لكيفية تحليل XML في C ++. TinyXML هي مكتبة مبسطة لتحليل بيانات XML. يستخدم معظم المبرمجين بشكل أساسي RapidXML أو PugiXML لتحليل بيانات XML.