2011-04-10 14 views
5

Kendi ayar kitaplığına göre yazmaya başlamadan önce var olanı bulmaya çalışıyorum. Ben googled ve C# veya MFC için bol bulundu ama düz C++/STL kullanan hiçbir şey.C++ kütüphanesi XML ortamında ayarları saklamaya yönelik kütüphane

mySettings["Root"]["Subsection"]["Value"].Value 

Ya da o çizgisinde bir şey: Ben gibi tuşları üzerinden bağlantı imkanı şey istiyorum. Bir XML dosyasına bu tür bir arayüz sağlayabilecek herhangi bir şey var mı yoksa kendi başıma mı dönmem gerekecek?

sayesinde J

TinyXML ve pugixml yoktur
+0

Neden XML? Ayarlarınızı insanların program dışından değiştirmesini gerçekten istiyor musunuz? Tüm bu döküntüleri ayrıştırmanız ve ardından doğrulamanız gerekir. Program dışından insan tarafından okunabilir mi? Makinenin/mimarinin bağımsız olması gerekir mi. Tüm yapılandırmanızı içeren bir yapı oluşturun. Aynı boyutta bir dosya oluşturun, dosyayı mmap yapının üzerine yerleştirin. Artık diskteki yapının ikili bir kopyasına sahipsiniz. Dosya kilitleme ekleyin ve birden çok işlemin yapılandırmayı paylaşabilirsiniz. Arkanıza yaslanın ve kar edin. – Angelom

+2

XML mükemmel olmasa da, daha sonra bir ayar eklemeniz durumunda, yazılımınızın ne eski ne de daha yeni revizyonlarının, ikili bir formatın tersine, ne çökeceğini ve ne yazacağını eklemiş olursanız, eklenen bonus ile "sadece çalışır" avantajı vardır. XML'in insan tarafından okunabilir olması sadece bir dezavantaj değildir. Elbette her zaman bir metin editöründe kurulum düzenleme ayarlarını bozacak bir aptal olacak, çünkü eğer XMLse, o zaman * mutlaka * config dosyalarını elle düzenleyebilmelisiniz - ama bu sizin kendi probleminizdir, sizinki değil. Aynı insanlar muhtemelen bir ikili düzende bir hex editöründe de düzenlemeye çalışırlar. TinyXML için – Damon

cevap

7

PugiXML size sadece bunun için boost getirmek isteyip düşünmek zorundayız olsa

+0

+1. TinyXML, pek çok revizyonda birkaç yıl boyunca Code :: Blocks için yapılandırma arka planı olarak güvenilir bir şekilde çalışıyor. Girdi verisindeki naif varsayımlardan ötürü bazı erken aşama başarısızlıkları, hiçbir zaman bir sorun yaratmamıştır. – Damon

+0

+ 1 pugixml ilginç görünüyor – Ralf

+1

pugixml mükemmeldir. Sadece birkaç saat içinde mevcut kayıt defteri tabanlı ayarları sistemi ile değiştirdim ve harika çalışıyor! – JWood

5

Boost property tree böyle bir kütüphane XPath destekleyeceğini var amaç. örnekte gösterildiği gibi bir şey yapıyor hatırlıyorum olsa daha karmaşık sağ olsun biraz daha uzun sürdü, basit konfigürasyon özellikleri için iyi çalışır:

Aşağıdaki kod belgeleri alınır

:

// Create an empty property tree object 
using boost::property_tree::ptree; 
ptree pt; 

// Load the XML file into the property tree. If reading fails 
// (cannot open file, parse error), an exception is thrown. 
read_xml(filename, pt); 

// Get the filename and store it in the m_file variable. 
// Note that we construct the path to the value by separating 
// the individual keys with dots. If dots appear in the keys, 
// a path type with a different separator can be used. 
// If the debug.filename key is not found, an exception is thrown. 
m_file = pt.get<std::string>("debug.filename"); 
+0

Öneri için teşekkürler, sadece bu görev için destek getirmek biraz isteksizdi ama sonunda pugixml hile yaptı. – JWood

+0

@JWood: neden? Sadece bir başlık kütüphanesi. Oldukça güzel – Inverse

+0

@Inverse - Ben daha önce takviye baktım ve temelde her parça üzerinde dayanan takviye diğer parçaların sayısı tarafından çıkarıldı. Burada yanlış olabilirim, ancak genellikle bir bileşenin daha fazla sayıda bileşen eklenmesini gerektiriyordu. Kuşkusuz bu sadece kısa bir bakıştı ama Qt ve eklenmesi gereken ek DLL tonları vizyonları vardı. – JWood

0

Tümü ilginç cevaplar. Ancak, C++ kendi XML API'sini sağlamasına, gerçek bir XML yapılandırma dosyası kullanmasına ve kendi özelleştirilmiş XML Yapılandırma sınıfınızı uygulamasına kadar en iyi yol olduğunu vurgulamalıyım. Bugün aynı görevle yüzleşiyorum ve kullanacağım çözüm bu. Kendi XML şemanızı sürdürdüğünüz için konfigürasyon ayarlarını siyah beyaz olarak görebilirsiniz. Sonra XML Yapılandırma sınıfınız, çözümünüzü aşırı özellik ve karmaşıklıklarla aşırı yüklemeden bu şemayı ayrıştırmak için özelleştirildi. Basit, özlü ve pratik/= bloatware.

İlgili konular