Evet sosyal mesajımızı da verdikten sonra bu laf kalabalığına son verip mevzuya giriş yapalım.
C++ da XML dosyalarını parse etmek için herşeyi bizim yapmamıza gerek yok sağolsun elin adamı bizler için vakti zamanında bir kütüphane yazmış. Bize düşen sadece kütüphanenin fonksiyonlarını doğru bir şekilde kullanmak. Bu kütüphanemizin adı libxml2. Öncelikle bağımlılıkları ile beraber bunu bilgisayarımıza kurup IDE ayarlarımızı yapacağız.
1- Bu adresten libxml2 nin Igor Zlatkovic adlı kişi tarafından windows için derlenmiş en son sürümünü indirelim(Kendisine de teşekkür ederiz). İndirdiğimiz dosyayı ileride bu yolu tekrar kullanacağımızı da göz önünde bulundurarak bir yere unzip edelim. (Ben C:\libxml2 yoluna unzip ettim anlatıma da buna göre devam edeceğim).
2- 1.adımda verdiğim linkten yine windows için derlenmiş iconv kütüphanesinin en son sürümünü indirelim -bu kütüphanenin ne işe yaradığını bende daha önceden bilmiyordum. İnternette kısa bir araştırmadan sonra karakter dönüştürme kütüphanesi olduğunu öğrendim. İleride işimize yarayabilecek bir bilgi ;). Aynı şekilde dosyaları yine bir yere unzip edin. (Ben C:\libiconv yoluna unzip ettim).
3- Şimdi sıra IDE ayarlarını yapmaya geldi. Ben her zamanki gibi Code::Blocks üzerinden anlatacağım. Diğer IDE'ler ile de yaklaşık olarak aynı mantıkla yapılan bir işlem. Codeblocksu açıp Settings menüsünden Compiler and debugger bölümüne giriyoruz. Ve aşağıda belirttiğim yerlere gerekli eklemeleri yapıyoruz.
Linker Settings->Link libraries: C:\libxml2\lib\libxml2.lib
Linker Settings->Link libraries: C:\libiconv\lib\iconv.lib
Search Directories->Compiler: C:\libxml2\include
Search Directories->Compiler: C:\libiconv\include
Search Directories->Linker: C:\libxml2\lib
Search Directories->Linker: C:\libiconv\lib
Search Directories->Resource compiler: C:\libxml2\include
Search Directories->Resource compiler: C:\libiconv\include
4- Kodu yazacağımız .cpp dosyasının yanında bazı dll'lerin bulunması gerekli. Bunları aşağıda belirttim. Biri hariç diğerlerini daha önce indirdiğimiz dosyalarda bulabilirsiniz.
- libxml2.dll
- iconv.dll
- zlib1.dll (Burdan indirebilirsiniz. Tam olarak ne yaptığını bilmemekle beraber sıkıştırma işlemi için gerekli bir dll imiş.)
"dosya.xml"
<?xml version="1.0" encoding="utf-8" ?>
<ogrenci>
<bilgi>
<ad>Esat ARSLAN</ad>
<dtarih>27/10/1986</dtarih>
</bilgi>
<bilgi>
<ad>Ali Veli</ad>
<dtarih>01/01/1986</dtarih>
</bilgi>
</ogrenci>
"xmlParse.cpp"
#include <iostream>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
void xmlParse()
{
xmlDocPtr docPtr;
xmlNodePtr rootNodePtr;
xmlNodePtr childNodePtr;
docPtr = xmlParseFile("dosya.xml");
rootNodePtr = xmlDocGetRootElement(docPtr);
rootNodePtr = rootNodePtr->xmlChildrenNode;
while(rootNodePtr != NULL)
{
if ((!xmlStrcmp(rootNodePtr->name,(const xmlChar *) "bilgi")))
{
childNodePtr = rootNodePtr;
childNodePtr = rootNodePtr->xmlChildrenNode;
xmlChar *ad;
while(childNodePtr != NULL)
{
if ((!xmlStrcmp(childNodePtr->name,(const xmlChar *)"ad")))
{
ad = xmlNodeListGetString(docPtr,childNodePtr->xmlChildrenNode,1);
std::cout<<ad<<std::endl;
}
childNodePtr=childNodePtr->next;
}
}
rootNodePtr=rootNodePtr->next;
}
}
int main()
{
xmlParse();
return 0;
}
9 yorum:
Teşekkürler ilk lazım olduğunda deniyeceğim :). Birde blogumda syntax highlighter kullanıyorum ama kod yayınlarken < > gibi karakterlerde hatalar oluşuyor. Sizin sitenizdeki sistem çok hoşuma gitti. Acaba nereden edinebilirim?
Aynı problemile bende karşılaştım. Çözüm ararken aşağıdaki linkte şimdiki kullandığım yöntemi keşfettim. Tek sorun c# formatında renklendirme yapması. Umarım işinize yarar :)
http://mehmettaskopru.blogspot.com/2009/02/blogger-uzerinde-kod-renklendirme.html
Yaklaşık 6 saattir kullanımı kolay bir XMLParser arıyordum C++ için. Çoğu library sıkıntı çıkardı. Sizin yazdığınız post sayesinde ise dosyayı okuyabildim.
Teşekkürler.
Yardımcı olmasına sevindim
Kolay gelsin..
Dev c++ için de kullanılabiliyor mu bu parser?
Denemedim, muhtemelen çalışıyodur.
Kardeş bu dll leri nereye atacağız? gzdirect yordam giriş noktası, zlib.dll dinamik bağlantı kitaplığında bulunamadı." hatası alıyorum.
dll dosyları, programın oluştuğu exe nin yanında olmalı. Ama tabi bundan önce, kütüphane dosyalarını doğru şekilde IDE ayalarından projeye bağlamalısın.
Yorum Gönder