Cách phân tích cú pháp XML trong C ++

How Parse Xml C



Trong bài viết này, chúng ta sẽ thảo luận về cách phân tích cú pháp XML trong ngôn ngữ lập trình C ++. Chúng ta sẽ xem một số ví dụ làm việc để hiểu cơ chế phân tích cú pháp XML trong C ++.

XML là gì?

XML là một ngôn ngữ đánh dấu và chủ yếu được sử dụng để lưu trữ và truyền dữ liệu một cách có tổ chức. XML là viết tắt của eXtensible Markup Language. Nó rất giống với HTML. XML hoàn toàn tập trung vào việc lưu trữ và truyền dữ liệu, trong khi HTML được sử dụng để hiển thị dữ liệu trên trình duyệt.







Tệp XML mẫu / Cú pháp XML

Đây là một tệp XML mẫu:



phiên bản='1.0' mã hóa='utf-8'?>

>

student_type='Bán thời gian'>

>Tom>

>

student_type='Toàn thời gian'>

>vịt đực>

>

>

Không giống như HTML, Nó là một ngôn ngữ đánh dấu hướng thẻ và chúng ta có thể xác định thẻ của riêng mình trong một tệp XML. Trong ví dụ trên, chúng tôi có một số thẻ do người dùng xác định, chẳng hạn như. Mỗi thẻ sẽ có thẻ kết thúc tương ứng. là thẻ kết thúc cho. Chúng tôi có thể xác định bao nhiêu thẻ do người dùng xác định nếu chúng tôi muốn tổ chức dữ liệu.



Thư viện phân tích cú pháp trong C ++:

Có nhiều thư viện khác nhau để phân tích dữ liệu XML trong hầu hết các ngôn ngữ lập trình cấp cao. C ++ không phải là một ngoại lệ. Dưới đây là các thư viện C ++ phổ biến nhất để phân tích cú pháp dữ liệu XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Như tên cho thấy, RapidXML chủ yếu tập trung vào tốc độ và nó là một thư viện phân tích cú pháp kiểu DOM. PugiXML hỗ trợ chuyển đổi Unicode. Bạn có thể muốn sử dụng PugiXML nếu bạn muốn chuyển đổi tài liệu UTF-16 sang UTF-8. TinyXML là phiên bản tối thiểu để phân tích cú pháp dữ liệu XML và không nhanh bằng hai phiên bản trước. Nếu bạn chỉ muốn hoàn thành công việc và không quan tâm đến tốc độ, bạn có thể chọn TinyXML.

Các ví dụ
Bây giờ, chúng ta đã hiểu cơ bản về XML và các thư viện phân tích cú pháp XML trong C ++. Bây giờ chúng ta hãy xem xét một số ví dụ để phân tích cú pháp tệp xml trong C ++:



  • Ví dụ-1: Phân tích cú pháp XML trong C ++ bằng RapidXML
  • Ví dụ-2: Phân tích cú pháp XML trong C ++ bằng PugiXML
  • Ví dụ-3: Phân tích cú pháp XML trong C ++ bằng TinyXML

Trong mỗi ví dụ này, chúng tôi sẽ sử dụng các thư viện tương ứng để phân tích cú pháp một tệp XML mẫu.

Ví dụ-1: Phân tích cú pháp XML trong C ++ bằng RapidXML

Trong chương trình ví dụ này, chúng tôi sẽ trình bày cách phân tích cú pháp xml bằng thư viện RapidXML trong C ++. Đây là tệp XML đầu vào (sample.xml):

phiên bản='1.0' mã hóa='utf-8'?>

>

student_type='Bán thời gian'>

>John>

>

student_type='Toàn thời gian'>

>Sean>

>

student_type='Bán thời gian'>

>Sarah>

>

>

Mục tiêu của chúng tôi ở đây là phân tích cú pháp tệp XML ở trên bằng C ++. Đây là chương trình C ++ để phân tích dữ liệu XML bằng RapidXML. Bạn có thể tải xuống thư viện RapidXML từ Ở đây .

#bao gồm
#bao gồm
#bao gồm
#include 'quickxml.hpp'

sử dụng không gian têngiờ;
sử dụng không gian tênquickxml;


xml_documentdoc
xml_node *Nút gốc= VÔ GIÁ TRỊ;

NSchủ chốt(vô hiệu)
{
Giá cả << ' Đang phân tích dữ liệu sinh viên của tôi (sample.xml) ..... ' <<endl;

// Đọc tệp sample.xml
ifstream theFile('sample.xml');
vectơ<char>đệm((istreambuf_iterator<char>(tập tin)), istreambuf_iterator<char>());
đệm.push_back(' 0');

// Phân tích cú pháp bộ đệm
doc.phân tích cú pháp<0>(&đệm[0]);

// Tìm ra nút gốc
Nút gốc=doc.first_node('MyStudentsData');

// Lặp lại các nút sinh viên
(xml_node *student_node=Nút gốc->first_node('Sinh viên');student_node;student_node=student_node->next_sibling())
{
Giá cả << ' Loại sinh viên = ' <<student_node->first_attribute('student_type')->giá trị();
Giá cả <<endl;

// Tương tác với tên sinh viên
(xml_node *student_name_node=student_node->first_node('Tên');student_name_node;student_name_node=student_name_node->next_sibling())
{
Giá cả << 'Tên sinh viên =' <<student_name_node->giá trị();
Giá cả <<endl;
}
Giá cả <<endl;
}

trở lại 0;
}

Ví dụ-2: Phân tích cú pháp XML trong C ++ bằng PugiXML

Trong chương trình ví dụ này, chúng tôi sẽ trình bày cách phân tích cú pháp xml bằng thư viện PugiXML trong C ++. Đây là tệp XML đầu vào (sample.xml):

phiên bản='1.0' mã hóa='UTF-8' độc lập='không' ?>

FormatVersion='1'>

>

Tên='John' Kiểu='Bán thời gian'>

>

Tên='Sean' Kiểu='Toàn thời gian'>

>

Tên='Sarah' Kiểu='Bán thời gian'>

>

>

>

Trong chương trình ví dụ này, chúng tôi sẽ trình bày cách phân tích cú pháp xml bằng thư viện pugixml trong C ++. Bạn có thể tải xuống thư viện PugiXML từ Ở đây .

#bao gồm
#include 'pugixml.hpp'

sử dụng không gian têngiờ;
sử dụng không gian tênpugi;

NSchủ chốt()
{
Giá cả << ' Phân tích cú pháp dữ liệu nhân viên (sample.xml) ..... ';


tài liệu xml_document;

// tải tệp XML
nếu như (!doc.tải tập tin('sample.xml')) trở lại -1;

công cụ xml_node=doc.đứa trẻ('Nhân viênData').đứa trẻ('Người lao động');


(xml_node_iterator it=công cụ.bắt đầu();!=công cụ.kết thúc(); ++)
{
Giá cả << 'Người lao động:';

(xml_attribute_iterator ait=->thuộc tính_bắt đầu();thuộc về!=->thuộc tính_end(); ++thuộc về)
{
Giá cả << '' <<thuộc về->Tên() << '=' <<thuộc về->giá trị();
}

Giá cả <<endl;
}

Giá cả <<endl;

trở lại 0;

}

Ví dụ-3: Phân tích cú pháp XML trong C ++ bằng TinyXML

Trong chương trình ví dụ này, chúng tôi sẽ trình bày cách phân tích cú pháp xml bằng thư viện TinyXML trong C ++. Đây là tệp XML đầu vào (sample.xml):

phiên bản='1.0' mã hóa='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

Trong chương trình ví dụ này, chúng tôi sẽ trình bày cách phân tích cú pháp xml bằng thư viện TinyXML trong C ++. Bạn có thể tải xuống thư viện TinyXML từ Ở đây .

#bao gồm
#bao gồm
#bao gồm
#include 'tinyxml2.cpp'

sử dụng không gian têngiờ;
sử dụng không gian têntinyxml2;


NSchủ chốt(vô hiệu)
{
Giá cả << ' Đang phân tích dữ liệu sinh viên của tôi (sample.xml) ..... ' <<endl;

// Đọc tệp sample.xml
Tài liệu XMLDocument;
doc.Tải tập tin( 'sample.xml' );

hăng sô char*chức vụ=doc.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Sinh viên' )->GetText();
printf( 'Tên sinh viên:% s ', chức vụ);


XMLText*textNode=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Sinh viên' )->FirstChild()->Để kiểm tra();
chức vụ=textNode->Giá trị();
printf( 'Tên sinh viên:% s ', chức vụ);


trở lại 0;
}

Phần kết luận

Trong bài viết này, chúng tôi đã thảo luận ngắn gọn về XML và xem xét ba ví dụ khác nhau về cách phân tích cú pháp XML trong C ++. TinyXML là một thư viện tối giản để phân tích dữ liệu XML. Hầu hết các lập trình viên chủ yếu sử dụng RapidXML hoặc PugiXML để phân tích dữ liệu XML.