2010-09-17 14 views
23

Gömülü bir proje için çok küçük bir XML ayrıştırıcısının peşindeyim. 10-15k'ye kadar derlemeyi gerektirir, doğrulamak zorunda değildir ve basit ve taşınabilir olması gerekir.Gömülü bir C projesi için iyi bir küçük XML ayrıştırıcısı var mı?

+2

Benzer şekilde [ C Gömülü Sistemler için XML kütüphanesi ] (http://stackoverflow.com/questions/1131701/c-xml-library-for-embedded-systems) mükemmel bir yanıt görmemekle birlikte . –

+1

XML mutlak bir gereklilik midir? 15k, gereksinimlerinizi karşılamak için elinizin altında olmadığı bir şey için gayet sıkıdır, ancak o kadar küçük olan bir hazır JSON çözümleyici bulamadıysan şaşırırım. – llasram

+1

Merhaba llasram, yorumunuz için teşekkürler. Evet, XML bir şarttır. Sonunda sorunumu çözdüm, sadece bunu yaparak: gereksinimlerimi karşılayan bir XML ayrıştırıcısını yuvarlama. Ortaya çıkan kod sadece birkaç K'da geldi ... ama daha sonra onları tekrar incelediğimde XML ayrıştırma gereksinimlerim oldukça basit çıktı. – Joe

cevap

5

Her zaman kendi uygulamanızı yuvarlayabilirsiniz. Bunu birkaç yıl önce yaptım ve şimdi mercurial.intuxication.org/hg/cstuff koduna bazı arayüz belgeleri ekledim.

Lütfen ayrıştırıcının hiçbir zaman bir üretim ortamında kullanılmadığını ve hatta daha fazla test edilmediğini unutmayın; Yorumlar, aynı zamanda, bu yüzden değiştirmek gerekiyorsa kodu grokking eğlenin;)

+0

Teşekkürler Christoph. Sonunda yaptığım işte tam da bu - kendi uygulamamı hazırladım. Aslında mesajınızı önce uyguladım, ancak yine de teşekkürler - Uygulamanıza bir göz atacağım ve kendi başıma kıyaslayacağım. – Joe

+0

@Christoph, bu tam olarak aradığım şey gibi görünüyor - gönderdiğiniz için teşekkürler! – mikepurvis

7

Aşağıdaki XML ayrıştırıcı kitaplıklarının derleme bayraklarını C'ye göre ayarlayabildim ve% 50'den fazla azaltma yapabildim Ubuntu makinemdeki büyüklükleri.

burada iyi bir tartışma vardır:: Mini-XML istemiş ne tek yakındır

C XML library for Embedded Systems

6

ben, bir aklında ne karşılaşmaları ve yakın zamanda biri için ben SimpleXML (http://simplexml.sourceforge.net/) ve biraz daha büyük sxmlc (http://sourceforge.net/projects/sxmlc/)

Ben daha basit olduğu için, bunu deneyin vermedi SimpleXML daha ilginç buluyorum ama görünüşe bulundu egzotik XML özelliklerini desteklemeyen tek dosya (well .h ve .c) kitaplığı.

Basit XML ayrıştırıcısı, XML alt kümesi için küçük bir ayrıştırıcıdır (varlıklar ve ad alanları hariç). Basit bir "etiket başına tek kullanımlık" arayüzü kullanır ve sınırlı kaynaklara sahip cihazlarla kullanım için uygundur.

1

sxmlc ("Simple XML in C"), tam olarak şöyle olması için geliştirdim: mümkün olduğunca küçük dosyalar. Belgedeki XPath benzeri aramaya ihtiyacınız varsa, ekleyebileceğiniz isteğe bağlı bir "arama" dosyasına sahip tek bir dosya.

DOM stili yüklemeyi (tüm belge ağacını bellekte) veya SAX stili yüklemeyi (bir düğüm, öznitelikleriyle okunduğunda veya bir düğümde metin okunduğunda geri aramaları çağırır) işler. Bellek bir endişe ise SAX ile ilgileneceksiniz.

Bazı kullanıcılar, dosyaları veya bellek arabelleklerini ayrıştırmasıyla da ilgileniyordu (XML'i bir web yanıtı olarak aldığınızda kullanışlıdır).

Unicode dosyalarını sürüm 4'ten #define'a kadar işler, bu nedenle Unicode'a ihtiyacınız yoksa, yalnızca SXMLC_UNICODE'u tanımlamayın ve ikilide herhangi bir ağırlık artışı olmayacaktır.

Ayrıca diske XML yazarken yorumları tutar da söylemeliyim! İnsanlar her zaman XML dosyalarında yapılandırma sözdizimini açıklayan zaman harcadığında ("özel 'özel sıkıştırmayı etkinleştirmek için' koy '...), uygulama tarafından geri yüklendiğinde silindiğinde her zaman üzüldüm.

Linux ve Windows altında derler. İnsanları yönlendiricilerde mutlu bir şekilde gömdüğümden iyi geribildirim aldım.

Mümkün olduğu kadar basit tutmak istediğimden, muhtemelen yeni işlevler eklemeyeceğim, ancak mevcut olanları (ve elbette doğru hatalar! :)) iyileştirmeyeceğim. Hata bildirilmediği sürece, geliştirilmesinde çok aktif değilim.

4

yxml'u deneyin - gerçekten küçük ve hızlı onaylamayan ayrıştırıcıdır.

İlgili konular