כיצד לנתח XML ב- C ++

How Parse Xml C



במאמר זה נדון כיצד לנתח XML בשפת התכנות C ++. נראה מספר דוגמאות עבודה להבנת מנגנון ניתוח ה- XML ​​ב- C ++.

מהו XML?

XML היא שפת סימון ומשמשת בעיקר לאחסון והעברת נתונים בצורה מאורגנת. XML מייצג שפת סימון eXtensible. זה מאוד דומה ל- HTML. ה- XML ​​מתמקד לחלוטין באחסון והעברת הנתונים, ואילו ה- HTML משמש להצגת הנתונים בדפדפן.







קובץ XML לדוגמה/תחביר XML

להלן קובץ XML לדוגמה:



גִרְסָה='1.0' הַצפָּנָה='utf-8'?>

>

סוג סטודנט='משרה חלקית'>

>טום>

>

סוג סטודנט='זמן מלא'>

>דרייק>

>

>

שלא כמו HTML, זוהי שפת סימון מוכוונת תג, ואנו יכולים להגדיר תג משלנו בקובץ XML. בדוגמה שלמעלה, יש לנו מספר תגים המוגדרים על ידי משתמשים כגון. לכל תג יהיה את תג הסיום המתאים. הוא תג הסיום עבור. אנו יכולים להגדיר כמה שיותר תגים שהוגדרו על ידי המשתמש כפי שאנו רוצים לארגן את הנתונים.



ניתוח ספריות ב- C ++:

ישנן ספריות שונות לנתח נתוני XML ברוב שפות התכנות ברמה גבוהה. C ++ אינו יוצא מן הכלל. להלן הספריות הפופולריות ביותר של C ++ לניתוח נתוני XML:





  1. RapidXML
  2. PugiXML
  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'

באמצעות מרחב שמותשעה (ות;
באמצעות מרחב שמותrapidxml;


xml_documentדוקטור
xml_node *root_node= ריק;

intרָאשִׁי(בָּטֵל)
{
עֲלוּת << ' nניתוח נתוני התלמידים שלי (sample.xml) ..... ' <<endl;

// קרא את קובץ sample.xml
ifstream הקובץ('sample.xml');
וֶקטוֹר<לְהַשְׁחִיר>בַּלָם((istreambuf_iterator<לְהַשְׁחִיר>(הקובץ)), istreambuf_iterator<לְהַשְׁחִיר>());
בַּלָם.התנגדות(' 0');

// לנתח את המאגר
דוקטור.לְנַתֵחַ<0>(&בַּלָם[0]);

// גלה את צומת השורש
root_node=דוקטור.הצומת הראשון_('MyStudentsData');

// חזר על הצמתים של התלמידים
ל (xml_node *צומת סטודנט=root_node->הצומת הראשון_('סטוּדֶנט');צומת סטודנט;צומת סטודנט=צומת סטודנט->סימון הבא())
{
עֲלוּת << ' nסוג תלמיד = ' <<צומת סטודנט->תכונה_ראשונה('סוג סטודנט')->ערך();
עֲלוּת <<endl;

// אינטראקציה על שמות התלמידים
ל(xml_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רָאשִׁי()
{
עֲלוּת << ' nניתוח נתוני עובדים (sample.xml) ..... n n';


מסמך xml_document;

// טען את קובץ ה- XML
אם (!דוקטור.קובץ load_('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 מ פה .

#לִכלוֹל
#לִכלוֹל
#לִכלוֹל
#כלול 'tinyxml2.cpp'

באמצעות מרחב שמותשעה (ות;
באמצעות מרחב שמותtinyxml2;


intרָאשִׁי(בָּטֵל)
{
עֲלוּת << ' nניתוח נתוני התלמידים שלי (sample.xml) ..... ' <<endl;

// קרא את קובץ sample.xml
מסמך XMLDocument;
דוקטור.LoadFile( 'sample.xml' );

קבוע לְהַשְׁחִיר*כותרת=דוקטור.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'סטוּדֶנט' )->GetText();
printf( 'שם התלמיד: %s n', כותרת);


XMLText*textNode=דוקטור.LastChildElement( 'MyStudentsData' )->LastChildElement( 'סטוּדֶנט' )->ילד ראשון()->לסמס();
כותרת=textNode->ערך();
printf( 'שם התלמיד: %s n', כותרת);


לַחֲזוֹר 0;
}

סיכום

במאמר זה דנו בקצרה XML ובחן שלוש דוגמאות שונות כיצד לנתח XML ב- C ++. TinyXML היא ספרייה מינימליסטית לניתוח נתוני XML. רוב המתכנתים משתמשים בעיקר ב- RapidXML או ב- PugiXML לניתוח נתוני XML.