C++'da XML Nasıl Ayrıştırılır

How Parse Xml C



Bu yazıda, C++ programlama dilinde XML'in nasıl ayrıştırılacağını tartışacağız. C++'da XML ayrıştırma mekanizmasını anlamak için birkaç çalışma örneği göreceğiz.

XML nedir?

XML bir biçimlendirme dilidir ve esas olarak verileri organize bir şekilde depolamak ve aktarmak için kullanılır. XML, Genişletilebilir İşaretleme Dili anlamına gelir. HTML'ye çok benzer. XML tamamen verileri depolamaya ve aktarmaya odaklanırken HTML, verileri tarayıcıda görüntülemek için kullanılır.







Örnek Bir XML Dosyası/XML Sözdizimi

İşte örnek bir XML dosyası:



versiyon='1.0' kodlama='utf-8'?>

>

öğrenci_türü='Yarı zamanlı'>

>Tom>

>

öğrenci_türü='Tam zamanlı'>

>Ejderha>

>

>

HTML'den farklı olarak, etiket odaklı bir biçimlendirme dilidir ve kendi etiketimizi bir XML dosyasında tanımlayabiliriz. Yukarıdaki örnekte, gibi birkaç kullanıcı tanımlı etiketimiz var. Her etiketin ilgili bitiş etiketi olacaktır. için bitiş etiketidir. Verileri düzenlemek istediğimiz kadar kullanıcı tanımlı etiket tanımlayabiliriz.



C++'da Kitaplıkları Ayrıştırma:

Üst düzey programlama dillerinin çoğunda XML verilerini ayrıştırmak için çeşitli kitaplıklar vardır. C++ bir istisna değildir. XML verilerini ayrıştırmak için en popüler C++ kitaplıkları şunlardır:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Adından da anlaşılacağı gibi, RapidXML esas olarak hıza odaklanmıştır ve DOM tarzı bir ayrıştırma kitaplığıdır. PugiXML, Unicode dönüştürmeyi destekler. UTF-16 belgesini UTF-8'e dönüştürmek istiyorsanız PugiXML kullanmak isteyebilirsiniz. TinyXML, XML verilerini ayrıştırmak için minimum bir sürümdür ve önceki ikisine kıyasla o kadar hızlı değildir. Sadece işi halletmek istiyorsanız ve hızı umursamıyorsanız TinyXML'i seçebilirsiniz.

Örnekler
Artık, C++'da XML ve XML ayrıştırma kitaplıkları hakkında temel bir anlayışa sahibiz. Şimdi C++'da xml dosyasını ayrıştırmak için birkaç örneğe bakalım:



  • Örnek-1: RapidXML kullanarak XML'i C++'da ayrıştırın
  • Örnek-2: PugiXML kullanarak XML'i C++'da ayrıştırın
  • Örnek-3: TinyXML kullanarak XML'i C++'da ayrıştırın

Bu örneklerin her birinde, örnek bir XML dosyasını ayrıştırmak için ilgili kitaplıkları kullanacağız.

Örnek-1: RapidXML kullanarak XML'i C++'da ayrıştırın

Bu örnek programda, C++'da RapidXML kitaplığı kullanarak xml'nin nasıl ayrıştırılacağını göstereceğiz. İşte giriş XML dosyası (sample.xml):

versiyon='1.0' kodlama='utf-8'?>

>

öğrenci_türü='Yarı zamanlı'>

>John>

>

öğrenci_türü='Tam zamanlı'>

>Sean>

>

öğrenci_türü='Yarı zamanlı'>

>Sarah>

>

>

Buradaki amacımız, yukarıdaki XML dosyasını C++ kullanarak ayrıştırmaktır. İşte RapidXML kullanarak XML verilerini ayrıştıran C++ programı. RapidXML kitaplığını adresinden indirebilirsiniz. Buraya .

#Dahil etmek
#Dahil etmek
#Dahil etmek
#'rapidxml.hpp'yi dahil et

kullanarak ad alanısaat;
kullanarak ad alanıhızlıxml;


xml_documentdoktor
xml_node *root_node= BOŞ;

intana(geçersiz)
{
maliyet << ' Öğrencilerimin verileri ayrıştırılıyor (sample.xml).....' <<son;

// sample.xml dosyasını okuyun
ifstream theDosya('örnek.xml');
vektör<karakter>tampon((istreambuf_iterator<karakter>(dosya)), istreambuf_iterator<karakter>());
tampon.Geri itmek(' 0');

// arabelleği ayrıştır
doktorayrıştırmak<0>(&tampon[0]);

// Kök düğümü bulun
root_node=doktorilk_düğüm('Öğrenci Bilgilerim');

// Öğrenci düğümleri üzerinde yineleme
için (xml_node *öğrenci düğümü=root_node->ilk_düğüm('Öğrenci');öğrenci düğümü;öğrenci düğümü=öğrenci düğümü->sonraki_sibling())
{
maliyet << ' Öğrenci Türü = ' <<öğrenci düğümü->first_attribute('öğrenci_türü')->değer();
maliyet <<son;

// Öğrenci İsimleri Üzerinde Etkileşim
için(xml_node *öğrenci_adı_node=öğrenci düğümü->ilk_düğüm('İsim');öğrenci_adı_node;öğrenci_adı_node=öğrenci_adı_node->sonraki_sibling())
{
maliyet << 'Öğrenci Adı =' <<öğrenci_adı_node->değer();
maliyet <<son;
}
maliyet <<son;
}

dönüş 0;
}

Örnek-2: PugiXML kullanarak XML'i C++'da ayrıştırın

Bu örnek programda, C++'da PugiXML kütüphanesini kullanarak xml'nin nasıl ayrıştırılacağını göstereceğiz. İşte giriş XML dosyası (sample.xml):

versiyon='1.0' kodlama='UTF-8' bağımsız='numara' ?>

FormatSürüm='1'>

>

İsim='John' Tip='Yarı zamanlı'>

>

İsim='Sean' Tip='Tam zamanlı'>

>

İsim='Sarah' Tip='Yarı zamanlı'>

>

>

>

Bu örnek programda, C++'da pugixml kütüphanesini kullanarak xml'nin nasıl ayrıştırılacağını göstereceğiz. PugiXML kütüphanesini adresinden indirebilirsiniz. Buraya .

#Dahil etmek
#'pugixml.hpp'yi dahil et

kullanarak ad alanısaat;
kullanarak ad alanıpugi;

intana()
{
maliyet << ' Çalışan verileri ayrıştırılıyor (sample.xml)..... ';


xml_document belgesi;

// XML dosyasını yükle
Eğer (!doktordosya yükle('örnek.xml')) dönüş -1;

xml_node araçları=doktorçocuk('Çalışan Verileri').çocuk('Çalışanlar');


için (xml_node_iterator=aletler.başlamak();o!=aletler.son(); ++o)
{
maliyet << 'Çalışanlar:';

için (xml_attribute_iterator ait=o->nitelikler_başlangıç();ait!=o->nitelikler_end(); ++ait)
{
maliyet << '' <<ait->isim() << '=' <<ait->değer();
}

maliyet <<son;
}

maliyet <<son;

dönüş 0;

}

Örnek-3: TinyXML kullanarak XML'i C++'da ayrıştırın

Bu örnek programda, C++'da TinyXML kütüphanesini kullanarak xml'nin nasıl ayrıştırılacağını göstereceğiz. İşte giriş XML dosyası (sample.xml):

versiyon='1.0' kodlama='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

Bu örnek programda, C++'da TinyXML kütüphanesini kullanarak xml'nin nasıl ayrıştırılacağını göstereceğiz. TinyXML kütüphanesini adresinden indirebilirsiniz. Buraya .

#Dahil etmek
#Dahil etmek
#Dahil etmek
#'tinyxml2.cpp'yi dahil et

kullanarak ad alanısaat;
kullanarak ad alanıminikxml2;


intana(geçersiz)
{
maliyet << ' Öğrencilerimin verileri ayrıştırılıyor (sample.xml).....' <<son;

// sample.xml dosyasını okuyun
XMLBelge belgesi;
doktorDosya yükle( 'örnek.xml' );

const karakter*Başlık=doktorFirstChildElement( 'Öğrenci Bilgilerim' )->FirstChildElement( 'Öğrenci' )->GetText();
baskı( 'Öğrenci Adı: %s ', Başlık);


XMLMetin*metinDüğümü=doktorLastChildElement( 'Öğrenci Bilgilerim' )->LastChildElement( 'Öğrenci' )->İlk çocuk()->Metne();
Başlık=metinDüğümü->Değer();
baskı( 'Öğrenci Adı: %s ', Başlık);


dönüş 0;
}

Çözüm

Bu yazımızda kısaca bahsettik XML ve C++'da XML'in nasıl ayrıştırılacağına dair üç farklı örneğe baktı. TinyXML, XML verilerini ayrıştırmak için minimalist bir kitaplıktır. Programcıların çoğu, XML verilerini ayrıştırmak için esas olarak RapidXML veya PugiXML kullanır.