2010-05-17 14 views
7

यह मैं क्या करने की जरूरत है:एक साधारण सी XML पार्सर

<user name="Mark"> 
    <param name="Age" value="21"/> 
    <param name="Country" value="NL"/> 
</user> 

मैं की जरूरत है: मैं निम्नलिखित कोड में एक XML स्वरूपित दस्तावेज़ को पढ़ने के लिए और तत्वों और उनके मान, उदाहरण के लिए इसे से निकालने की जरूरत है निकालने के लिए: नाम = मार्क, आयु = 21 और देश = एनएल।

आज तक मैं इस पार्सिंग को मैन्युअल रूप से कर रहा हूं जो दर्द है।

अब मुझे परवाह नहीं है कि फ़ाइल "उचित एक्सएमएल" या सब कुछ है, मुझे डीटीडी या अन्य मानक एक्सएमएल आवश्यकताओं की परवाह नहीं है। मुझे केवल मूल्यों को पढ़ने और विश्लेषण करने की आवश्यकता है।

कोई भी जानता है (lib eXpat के अलावा) ऐसा करने के लिए एक lib या ऐसा करने के लिए कोड? धन्यवाद!

जेस

संपादित करें: विंडोज और लिनक्स:

हाँ, मैं मंच उल्लेख करना भूल गया। सादा सी, नहीं में सी ++

+2

पुस्तकालयों के लिए पूछते समय, आप अपने प्लेटफ़ॉर्म का उल्लेख करना चाहेंगे, क्योंकि पुस्तकालय प्लेटफ़ॉर्म-विशिष्ट हो सकते हैं। – WhirlWind

+0

vtd-xml देखें, डीओएम और एसएएक्स –

उत्तर

7
+0

धन्यवाद से उपयोग करना बहुत आसान है, मैंने पहले से ही यह जांच लिया है और 1) यह मुझे हमेशा यह समझने के लिए ले गया कि वे मुझसे क्या चाहते थे (इसे काम करने के लिए) और 2) यह शिकायत करता है कि मेरे पास डीटीडी नहीं है और मेरी फ़ाइल ठीक तरह से स्वरूपित नहीं है। तो, एक अच्छा समाधान नहीं है। – Jessica

+0

मैं http://www.codeguru.com/cpp/data/data-misc/xml/article.php/c4549 – Jessica

+0

की लाइनों के साथ कुछ और सोच रहा था, इसे डीटीडी की आवश्यकता नहीं है, लेकिन इसकी आवश्यकता है कि एक्सएमएल अच्छी तरह से गठित है - यानी कि स्टार्ट/एंड टैग मेल खाते हैं और यह कि कोई अवैध पात्र नहीं है और यह एक और केवल मूल तत्व है।यदि आपका इनपुट अच्छी तरह से गठित नहीं है, तो आपको इसे ठीक करना चाहिए। यदि आपको अपने इनपुट को अच्छी तरह से एक्सएमएल बनाने की आवश्यकता नहीं है, लेकिन केवल कुछ एक्सएमएल-आईएसएच है, तो आप आसानी से अपना खुद का पार्सर लिख सकते हैं: इसे "<" & ">" वर्णों को टुकड़ों में तोड़ने के लिए खोजें और फिर प्रत्येक टुकड़े को पार्स करें। एक एक्सएमएल पार्सर की बहुत जटिलता इसलिए है क्योंकि इसे किसी भी सामान्यीकृत एक्सएमएल को किसी विशिष्ट आंतरिक मॉडल में पार्स करना पड़ता है। –

1

सी ++ ठीक है तो आप TinyXML कोशिश कर सकते हैं। मैं इसे कुछ सालों से इस्तेमाल कर रहा हूं और यह अच्छी तरह से काम करता है।

+0

धन्यवाद लेकिन यह सादा सी – Jessica

+0

पर्याप्त मेला है .... –

4

Expat पार्सर सबसे अच्छा मैं का सामना करना पड़ा है - मैं अपने सी विभिन्न सी ++ पारसर्स वरीयता में ++ कोड में इसका इस्तेमाल करते हैं - लेकिन यह में लिखा है सी। आपके आवेदन में उपयोग करने और एम्बेड करने में बहुत आसान है। इसलिए मैं नहीं दिख रहा है यही कारण है कि अपने प्रश्न में आप कहते हैं:

(lib प्रवासी के अलावा अन्य)

आप इसके खिलाफ कुछ है?

+0

मैं वास्तव में, निश्चित रूप से दी गई आवश्यकताओं पर विचार करके एक्सपैट चुनता हूं। इस मामले में इसका उपयोग करने का एकमात्र कारण यह नहीं है कि मैं सोच सकता हूं कि क्या पोस्टर को एसएएक्स कार्यक्रमों से डेटा संरचना बनाने की कोई समझ नहीं है और इस प्रकार एक डोम की आवश्यकता है? –

+0

नहीं, मेरे पास इसके खिलाफ कुछ भी नहीं है, असल में मैं इसे किसी अन्य प्रोजेक्ट पर उपयोग कर रहा हूं, हालांकि यह बड़ा है, और जो मुझे चाहिए उससे ज्यादा जटिल है। इसलिए, जैसा कि मैंने अपने प्रश्न में बहुत स्पष्ट रूप से इंगित किया है, मुझे समाधान के रूप में एक्सपेट नहीं किया जाएगा – Jessica

+0

@ जेसिका आपके पास "बड़ा" शब्द की अपनी निजी परिभाषा होनी चाहिए - एक्सपैट जितना छोटा हो उतना एक्सएमएल पार्सर होगा जितना आप जा रहे हैं प्राप्त। विशेष रूप से, यह मिनी-एक्सएमएल से छोटा है। –

4

मिनी-एक्सएमएल के बारे में कैसे? यह हल्के है, जीसीसी के साथ काम करता है, एएनएसआई-सी संगत है ...

http://www.minixml.org/index.php

प्रलेखन के अनुसार, खोजने के लिए विशिष्ट नोड्स के रूप में आसान होगा के लिए के रूप में:

/* Find the first "a" element */ 
    node = mxmlFindElement(tree, tree, "a", 
          NULL, NULL, 
          MXML_DESCEND); 

एक बार जब आप मिल नोड, आप अपनी आवश्यकताओं के अनुसार इसे कुशल बना सकते हैं।

+0

धन्यवाद, मैंने पहले ही इसे पोस्ट किया है (प्रश्न का अपना जवाब देखें) – Jessica

संबंधित मुद्दे