2008-09-24 11 views
16

मेरे पास 2.4 एमबी एक्सएमएल फ़ाइल है, जो माइक्रोसॉफ्ट प्रोजेक्ट से निर्यात है (हे, मैं यहां पीड़ित हूं!) जिसमें से मुझे पुन: प्रस्तुति के लिए कुछ विवरण निकालने का अनुरोध किया गया है। खुफिया जानकारी या अन्यथा अनुरोध को अनदेखा करते हुए, मुझे किस पुस्तकालय को रुबी परिप्रेक्ष्य से पहले कोशिश करनी चाहिए?आप कौन सी रूबी एक्सएमएल लाइब्रेरी 2.4 एमबी एक्सएमएल फाइल के लिए सिफारिश करेंगे?

मैं के बारे में पता कर रहा हूँ (किसी विशेष क्रम में) के बाद:

मैं कुछ के रूप में पैक पसंद करते हैं एक रूबी मणि, जिसे मुझे चिल्काट लाइब्रेरी पर संदेह है, वह नहीं है।

प्रदर्शन एक बड़ा मुद्दा नहीं है - मुझे उम्मीद नहीं है कि इस दिन किसी एक दिन में एक से अधिक बार चलाने की आवश्यकता है (सप्ताह में एक बार अधिक होने की संभावना है)। मुझे उस चीज़ में अधिक दिलचस्पी है जो उपयोग करने में आसान है क्योंकि एक्सएमएल से संबंधित कुछ भी प्राप्त करने में सक्षम है।

संपादित करें:

Hpricot एक देश मील द्वारा, है, सबसे आसान: मैं gemified लोगों की कोशिश की। उदाहरण के लिए, इस एक्सएमएल में SaveVersion टैग की सामग्री को निकालने के लिए (नामक एक फ़ाइल में सहेजा कहते हैं, 'test.xml')

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Project xmlns="http://schemas.microsoft.com/project"> 
    <SaveVersion>12</SaveVersion> 
</Project> 

कुछ इस तरह लेता है:

doc = Hpricot.XML(open('test.xml')) 
version = (doc/:Project/:SaveVersion).first.inner_html 

Hpricot करने लगता है नामस्थानों के साथ तुलनात्मक रूप से असंभव हो, जो इस उदाहरण में ठीक है: केवल एक ही है, लेकिन संभावित रूप से जटिल दस्तावेज़ के साथ समस्या होगी। चूंकि हैप्रिकॉट भी बहुत धीमा है, इसलिए मुझे लगता है कि यह एक समस्या होगी जो खुद को हल करती है।

libxml-ruby तीव्रता का क्रम है, नामस्थानों को समझता है (यह मुझे समझने के लिए कुछ घंटों का समय लेता है) और एक्सएमएल धातु के बहुत करीब है - XPath प्रश्न और अन्य सभी चीजें वहां हैं । यह जरूरी नहीं है कि, मेरी तरह, आप चरम दुविधा की शर्तों के तहत केवल एक एक्सएमएल दस्तावेज खोलें। सहायक नामस्थान को प्रभावी तरीके से प्रबंधित करने के उदाहरण प्रदान करने में सहायक मॉड्यूल अधिक सहायक था। यह मोटे तौर पर क्या मैं के साथ समाप्त हो गया है (मैं किसी भी तरह से अपनी सुंदरता, शुद्धता या अन्य मूल्य जोर देते हुए में नहीं कर रहा हूँ, यह सिर्फ मैं कहाँ हूँ अभी है):

xml_parser = XML::Parser.new 
xml_parser.string = File.read(path) 
doc = xml_parser.parse 
@root = doc.root 
@scopes = { :in_node => '', :in_root => '/', :in_doc => '//' } 
@ns_prefix = 'p' 
@ns = "#{@ns_prefix}:#{@root.namespace[0].href}" 
version = @root.find_first(xpath_qry("Project/SaveVersion", :in_root), @ns).content.to_i 

def xpath_qry(tags, scope = :in_node) 
    "#{@scopes[scope]}" + tags.split(/\//).collect{ |tag| "#{@ns_prefix}:#{tag}"}.join('/') 
end 

मैं अभी भी पक्ष-विपक्ष पर बहस कर रहा हूँ : _xhy कोड की सरासर शैली के लिए अपने अतिरिक्त कठोरता, hpricot के लिए libxml।

फिर से संपादित करें, कुछ हद तक बाद में: मैंने हैप्पीमैपर ('मणि इंस्टॉल happymapper') की खोज की जो कि अभी भी शुरुआती चरण में बेहद आशाजनक है। यह घोषणात्मक और अधिकतर काम करता है, हालांकि मैंने कुछ किनारे के मामलों को देखा है जिनके पास अभी तक फिक्स नहीं हैं।

module OPML 
    class Outline 
    include HappyMapper 
    tag 'outline' 
    attribute :title, String 
    attribute :text, String 
    attribute :type, String 
    attribute :xmlUrl, String 
    attribute :htmlUrl, String 
    has_many :outlines, Outline 
    end 
end 

xml_string = File.read("google-reader-subscriptions.xml") 

sections = OPML::Outline.parse(xml_string) 

मैं पहले से ही इसे प्यार करता हूँ, भले ही यह अभी तक सही नहीं है: यह आप इस तरह सामान, जो मेरे गूगल रीडर OPML पार्स करता है काम करने दिया।

+1

ओह नोस! एक 2.4 एमबी एक्सएमएल फ़ाइल! डर! – Will

+0

खैर, मैंने सोचा कि अगर यह 2.4 जीबी था तो जवाब अलग हो सकता है ...;) –

उत्तर

3

Hpricot शायद आपके लिए सबसे अच्छा टूल है - इसका उपयोग करना आसान है और बिना किसी समस्या के 2 एमजी फ़ाइल को संभालना चाहिए।

Speedwise libxml सबसे अच्छा होना चाहिए। मैंने कुछ महीने पहले पायथन के लिए libxml2 बाध्यकारी का उपयोग किया था (उस पल में आरबी-libxml पुराना था)। स्ट्रीमिंग इंटरफेस ने मेरे लिए सबसे अच्छा काम किया (रूबी मणि में LibXML :: XML :: रीडर)। यह फ़ाइल डाउनलोड करते समय फ़ाइल को संसाधित करने की अनुमति देता है, एसएक्स की तुलना में थोड़ा अधिक उपयोगकर्ता मित्रतापूर्ण है और मुझे 30 एमबी एक्सएमएल फ़ाइल से डेटा को इंटरनेट से एक मिनट से थोड़ा अधिक समय में एक MySQL डेटाबेस में लोड करने की अनुमति देता है।

+5

इन दिनों मैं Hpricot पर [Nokogiri] (http://nokogiri.org) की सिफारिश करता हूं। मेरे अनुभव में यह बहुत अधिक स्थिर रहा है और यह पूरी तरह से विशेष रूप से प्रदर्शित और अच्छी तरह से बनाए रखा गया है। –

+1

हाँ मैं मानता हूं, इन दिनों जाने के लिए नोकोगिरी रास्ता है – dimus

4

नोकोगिरी libxml2 और libxslt को एक स्वच्छ, रूबीश एपीआई के साथ लपेटता है जो नामस्थान, XPath और CSS3 क्वेरी का समर्थन करता है। फास्ट, भी। http://nokogiri.org/

+0

नोट, अंतर्निहित निर्भरताओं के कारण, यह केवल XPATH 1.0 का समर्थन करता है –

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

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