ในบทความนี้ เราจะพูดถึงวิธีแยกวิเคราะห์ XML ในภาษาโปรแกรม C++ เราจะเห็นตัวอย่างการทำงานหลายอย่างเพื่อทำความเข้าใจกลไกการแยกวิเคราะห์ XML ใน C++
XML คืออะไร?
XML เป็นภาษามาร์กอัปและส่วนใหญ่ใช้สำหรับการจัดเก็บและถ่ายโอนข้อมูลอย่างเป็นระเบียบ XML ย่อมาจากภาษามาร์กอัปที่ขยายได้ มันคล้ายกับ HTML มาก XML มุ่งเน้นไปที่การจัดเก็บและถ่ายโอนข้อมูลอย่างสมบูรณ์ ในขณะที่ HTML ใช้สำหรับแสดงข้อมูลบนเบราว์เซอร์
ตัวอย่างไฟล์ XML/ไวยากรณ์ XML
นี่คือตัวอย่างไฟล์ XML:
รุ่น='1.0' การเข้ารหัส='utf-8'?>
>
ต่างจาก HTML เนื่องจากเป็นภาษามาร์กอัปเชิงแท็ก และเราสามารถกำหนดแท็กของเราเองในไฟล์ XML ในตัวอย่างข้างต้น เรามีแท็กที่ผู้ใช้กำหนดหลายแท็ก เช่น ทุกแท็กจะมีแท็กปิดท้ายที่สอดคล้องกัน เป็นแท็กปิดท้ายสำหรับ . เราสามารถกำหนดแท็กที่ผู้ใช้กำหนดได้มากเท่าที่เราต้องการจัดระเบียบข้อมูล
การแยกวิเคราะห์ไลบรารีใน C ++:
มีไลบรารีต่างๆ เพื่อแยกวิเคราะห์ข้อมูล XML ในภาษาการเขียนโปรแกรมระดับสูงส่วนใหญ่ C ++ ไม่ใช่ข้อยกเว้น ต่อไปนี้คือไลบรารี C++ ที่ได้รับความนิยมมากที่สุดในการแยกวิเคราะห์ข้อมูล XML:
- RapidXML
- PugiXML
- 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 ได้จาก ที่นี่ .
#รวม#รวม
#รวม
#include 'rapidxml.hpp'
โดยใช้ เนมสเปซชั่วโมง;
โดยใช้ เนมสเปซRapidxml;
xml_documentเอกสาร
xml_node *root_node= โมฆะ;
intหลัก(โมฆะ)
{
ค่าใช้จ่าย << 'NSการแยกวิเคราะห์ข้อมูลนักเรียนของฉัน (sample.xml).....' <<endl;
// อ่านไฟล์ sample.xml
ifstream theFile('ตัวอย่าง.xml');
เวกเตอร์<char>กันชน((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());
กันชน.push_back(' 0');
// แยกวิเคราะห์บัฟเฟอร์
เอกสารแยกวิเคราะห์<0>(&กันชน[0]);
// ค้นหาโหนดรูท
root_node=เอกสารfirst_node('MyStudentsData');
// วนซ้ำโหนดนักเรียน
สำหรับ (xml_node *นักเรียน_node=root_node->first_node('นักเรียน');นักเรียน_node;นักเรียน_node=นักเรียน_node->next_sibling())
{
ค่าใช้จ่าย << 'NSประเภทนักศึกษา = ' <<นักเรียน_node->first_attribute('student_type')->ค่า();
ค่าใช้จ่าย <<endl;
// โต้ตอบกับชื่อนักเรียน
สำหรับ(xml_node *student_name_node=นักเรียน_node->first_node('ชื่อ');student_name_node;student_name_node=student_name_node->next_sibling())
{
ค่าใช้จ่าย << 'ชื่อนักเรียน = ' <<student_name_node->ค่า();
ค่าใช้จ่าย <<endl;
}
ค่าใช้จ่าย <<endl;
}
กลับ 0;
}
ตัวอย่างที่ 2: แยกวิเคราะห์ XML ใน C++ โดยใช้ PugiXML
ในโปรแกรมตัวอย่างนี้ เราจะสาธิตวิธีแยกวิเคราะห์ xml โดยใช้ไลบรารี PugiXML ใน C++ นี่คือไฟล์ XML อินพุต (sample.xml):
รุ่น='1.0' การเข้ารหัส='UTF-8' สแตนด์อโลน='ไม่' ?>>
ในโปรแกรมตัวอย่างนี้ เราจะสาธิตวิธีแยกวิเคราะห์ xml โดยใช้ไลบรารี pugixml ใน C++ คุณสามารถดาวน์โหลดไลบรารี PugiXML ได้จาก ที่นี่ .
#รวม#include 'pugixml.hpp'
โดยใช้ เนมสเปซชั่วโมง;
โดยใช้ เนมสเปซpugi;
intหลัก()
{
ค่าใช้จ่าย << 'NSการแยกวิเคราะห์ข้อมูลพนักงาน (sample.xml).....NSNS';
xml_document doc;
// โหลดไฟล์ XML
ถ้า (!เอกสารload_file('ตัวอย่าง.xml')) กลับ -1;
xml_node tools=เอกสารเด็ก('ข้อมูลพนักงาน').เด็ก('พนักงาน');
สำหรับ (xml_node_iterator มัน=เครื่องมือเริ่ม();มัน!=เครื่องมือจบ(); ++มัน)
{
ค่าใช้จ่าย << 'พนักงาน:';
สำหรับ (xml_attribute_iterator ait=มัน->แอตทริบิวต์_begin();ของ!=มัน->คุณลักษณะ_end(); ++ของ)
{
ค่าใช้จ่าย << '' <<ของ->ชื่อ() << '=' <<ของ->ค่า();
}
ค่าใช้จ่าย <<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หลัก(โมฆะ)
{
ค่าใช้จ่าย << 'NSการแยกวิเคราะห์ข้อมูลนักเรียนของฉัน (sample.xml).....' <<endl;
// อ่านไฟล์ sample.xml
เอกสาร XMLDocument;
เอกสารLoadFile( 'ตัวอย่าง.xml' );
const char*ชื่อ=เอกสารFirstChild Element( 'MyStudentsData' )->FirstChild Element( 'นักเรียน' )->รับข้อความ();
printf( 'ชื่อนักเรียน: %sNS', ชื่อ);
XMLText*textNode=เอกสารLastChildElement( 'MyStudentsData' )->LastChildElement( 'นักเรียน' )->ลูกคนแรก()->เป็นข้อความ();
ชื่อ=textNode->ค่า();
printf( 'ชื่อนักเรียน: %sNS', ชื่อ);
กลับ 0;
}
บทสรุป
ในบทความนี้เราได้พูดคุยกันสั้น ๆ XML และดูตัวอย่างที่แตกต่างกันสามแบบของการแยกวิเคราะห์ XML ใน C++ TinyXML เป็นไลบรารีที่เรียบง่ายสำหรับการแยกวิเคราะห์ข้อมูล XML โปรแกรมเมอร์ส่วนใหญ่ใช้ RapidXML หรือ PugiXML เพื่อแยกวิเคราะห์ข้อมูล XML เป็นหลัก