2011-01-13 18 views
7

En az üç hafif C++ XML ayrıştırıcısını biliyorum: RapidXML, TinyXML ve PugiXML. Bununla birlikte, her üçü de DOM tabanlı bir arayüz kullanırlar (yani, XML belgesinin kendi bellek içi temsillerini oluştururlar ve daha sonra bunu çaprazlamak ve değiştirmek için bir arabirim sağlarlar). Başa çıkmak zorunda olduğum çoğu durumda, SAX arayüzünü tercih ederim (ayrıştırıcının etiket başlangıcı gibi bir etkinlik akışını tükettiği ve uygulama kodunun bu olaylara dayanarak ne yapmak istediğinden sorumlu olduğu) .Hafif C++ SAX XML ayrıştırıcısı

Herkes SAX arabirimli hafif C++ XML kitaplığı önerebilir mi?

Düzenleme: Ayrıca, Microsoft XmlLite kitaplığı, bir SAX arabirimi (aslında, daha iyi olan aslında bir "çekme" arabirimi kullanmaktadır) dikkat etmeliyim. Ne yazık ki, kapalı kaynak ve sadece Windows olduğunu bildiğim kadarıyla (bu konuda yanılıyorsam lütfen beni düzeltin) şu an için benim için devre dışı bırakıldı.

+0

https://github.com/ igagis/mikroxml – igagis

cevap

5

XML ayrıştırmamız gerektiğinde expat kullanıyorum. Çok hafiftir (iyi, eskiden XML şeyler yaptığımdan beri bir süredir) ve işi yapar.

+0

İtiraf etmeliyim ki, hakettiğine dikkat etmedim. Bir C++ sarmalayıcısı ile kullanıyor musunuz? Eğer öyleyse, hangisi? –

+0

@John: Hatırlamak biraz zamanımı aldı, ama bunu yaptığımda bunu kullandım: http://beta.codeproject.com/KB/XML/expatimpl.aspx. Ama bu sadece çok ince bir sarıcıydı ve şu anda ciddi bir şekilde modası geçmiş. – sbi

+0

Tamam. Kendi C++ sarmalayıcımı üzerine koysam bile, expat'ın makul gibi görünüyor. –

0

PugiXML ve RapidXML'in DOM uyumlu arabirimleri yoktur. Bu API, işlevsellik ve uyumluluk konusunda ciddi sınırlamalar getirmiştir. DOM veya SAX/Pull

5

'dan daha gelişmiş olan VTD-XML'i araştırmak isteyebilirsiniz, http://die-xml.googlecode.com/'u deneyebilirsiniz. kullanımı çok küçük ve kolay gibi görünüyor

bu son zamanlarda yapılan C++ 0x XML SAX çözümleyici açık kaynak ve yazar istekli geri bildirimler

bir giriş akışı ayrıştırır ve uyumlu geri aramaları üzerine olay oluşturur olduğu std :: fonksiyon

yığın makinesi bir arka uç olarak sonlu otomata kullanır ve bazı olaylar oldukça hafif hale (etiket ve metin düğümleri başlangıç) arabelleğe en aza indirmek için iteratörler