2008-09-02 21 views
28

मान्य करना मैं एक एक्सएसडी के खिलाफ एक बड़ी एक्सएमएल फ़ाइल को सत्यापित करने का एक तरीका खोजने की कोशिश कर रहा हूं। मैंने ...best way to validate an XML... प्रश्न देखा लेकिन सभी उत्तरों ने सत्यापन के लिए ज़ीरिस लाइब्रेरी का उपयोग करने की ओर इशारा किया। एकमात्र समस्या यह है कि, जब मैं 180 एमबी फ़ाइल को सत्यापित करने के लिए उस लाइब्रेरी का उपयोग करता हूं तो मुझे आउटऑफमेमरी अपवाद मिलता है।एक बड़ी एक्सएमएल फ़ाइल

क्या कोई अन्य उपकरण, पुस्तकालय, सामान्य XML फ़ाइल से अधिक मान्य करने के लिए रणनीतियों हैं?

संपादित करें: SAX समाधान जावा सत्यापन के लिए काम करता है, लेकिन libxml उपकरण के लिए अन्य दो सुझाव जावा के बाहर सत्यापन के लिए भी बहुत उपयोगी थे।

+1

विंडोज टूल का उपयोग करने में आसान के लिए आप [एक्सएमएल वैलिडेटरबड्डी] (http://www.xml-tools.com/ValidatorBuddy.htm) का उपयोग कर सकते हैं जो जेरिस एसएक्स पार्सर का उपयोग करता है आंतरिक फाइलों को मान्य करने के लिए आंतरिक रूप से। – Clemens

उत्तर

30

एक डोमपार्सर का उपयोग करने के बजाय, एक SAXParser का उपयोग करें। यह इनपुट स्ट्रीम या रीडर से पढ़ता है ताकि आप इसे सभी को स्मृति में लोड करने के बजाय एक्सएमएल को डिस्क पर रख सकें।

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 

SAXParser parser = factory.newSAXParser(); 

XMLReader reader = parser.getXMLReader(); 
reader.setErrorHandler(new SimpleErrorHandler()); 
reader.parse(new InputSource(new FileReader ("document.xml"))); 
8

उपयोग libxml, जो मान्यता और करता है एक स्ट्रीमिंग मोड है।

+0

ऐसा लगता है कि यह libxml2 के तहत भी काम करेगा, सही? – oob

+0

@oob हां, libxml2 पूरी तरह से काम करता है। इसके अलावा, अगर कोई विंडोज़ बाइनरीज़ की तलाश में है, तो वे यहां हैं: ftp.zlatkovic.com/libxml/ – sfarbota

2

व्यक्तिगत रूप से मुझे XMLStarlet का उपयोग करना पसंद है जिसमें कमांड लाइन इंटरफ़ेस है, और स्ट्रीम पर काम करता है। यह Libxml2 पर बनाए गए टूल का एक सेट है।

1

SAX और libXML पहले से ही उल्लेख किए गए अनुसार मदद करेगा। आप -Xmx विकल्प का उपयोग कर JVM के लिए अधिकतम ढेर आकार को बढ़ाने का भी प्रयास कर सकते हैं। जैसे अधिकतम ढेर आकार को 512 एमबी तक सेट करने के लिए: java -Xmx512m com.foo.MyClass

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