2012-03-08 8 views
5

मैं ऐसी सूची पढ़ रहा हूं जिसमें कुछ घटकों के तहत बड़ी संख्या में अभिलेखागार हैं। उदा।रिकर्सिव निर्देशिका खोज के XML मैपिंग जेनरेट करें

component1:filelocation1/a11.ear 
component1:filelocation1/a12.ear 
component2:filelocation2/a2.ear 
component3:filelocation3/a3.ear 
component4:filelocation3/basefile.properties 

मैं डेटा के अंतिम स्तर तक रिकर्सिवली प्रत्येक संग्रह अनज़िप और संग्रह में पिछले तत्व के लिए घटक से सही मानचित्रण पर कब्जा एक XML मैपिंग फ़ाइल उत्पन्न करने के लिए की जरूरत है।

<my-app> 
    <mapping> 
    <toplevel loc="filelocation1" filename="a11.ear" component="component1"> 
     <childlevel loc="." filename="x1.war"> 
      <childlevel loc="WEB-INF/classes" filename="abc1.class"/> 
      <childlevel loc="WEB-INF/classes" filename="abc2.class"/> 
     </childlevel> 
    </toplevel> 
    <toplevel loc="filelocation1" filename="a12.ear" component="component1"> 
     <childlevel loc="." filename="x2.jar"> 
     <childlevel loc="org/test" filename="abc1.class"/> 
     <childlevel loc="org/test" filename="abc2.class"/> 
     </childlevel> 
     <childlevel loc="." filename="x3.war"> 
      <childlevel loc="WEB-INF/lib" filename="web1.jar"> 
      <childlevel loc="org/test" filename="abc1.class"/> 
     </childlevel> 
     <childlevel loc="WEB-INF/classes" filename="abc2.class"/> 
     </childlevel> 
    </toplevel> 
    </mapping> 
    </my-app> 

ऐसा करने के लिए सबसे अच्छा appraoch क्या है:

जिनमें से XML दस्तावेज़ संरचना की तरह हो सकता है? मैं एक्सएमएल उत्पन्न करने के लिए एक डोम पार्सर का उपयोग करने पर विचार कर रहा हूं।

+0

बस जोड़ने के लिए - प्रक्रिया में टेक्स्ट फ़ाइल से फ़ाइल सूची पढ़ना, प्रत्येक संग्रह को दोबारा अनजिप करना शामिल है, और जब इसे एक्सएमएल मैपिंग का निर्माण नहीं किया जा रहा है। तो एक संग्रह को विस्तारित करने के लिए एक रिकर्सिव कॉल को किसी भी तरह पैरेंट तत्व को पारित करने की आवश्यकता होगी ताकि एक बार जब यह रिकर्सिव लूप से बाहर हो जाए तो हमारे पास सही एक्सएमएल हो सकता है। इस XML में हमारे द्वारा शुरू की गई टेक्स्ट फ़ाइल में सभी अभिलेखागारों के लिए डेटा होगा। – rommel

+0

क्या आपके पास XML प्रसंस्करण के लिए उपयोग करने वाली भाषा के लिए कोई वरीयता है? – menjaraz

+0

यदि आप अपनी पूर्व पोस्ट से संबंधित हैं तो आप [टैग: जावा] टैग जोड़ सकते हैं। – menjaraz

उत्तर

0

मैं gradle का उपयोग करके ऐसा करूँगा।

ग्रैडल ने अनपॅकिंग अभिलेखागार के लिए सुविधाओं में अच्छा बनाया है। आप एक्सएमएल पार्सिंग/पीढ़ी के लिए ग्रोवी (ग्रेडल के साथ आता है) का उपयोग कर सकते हैं, जो जावा एक्सएमएल लाइब्रेरी का उपयोग करने से बहुत साफ होगा।

1

चूंकि JAR फ़ाइलें भी ज़िप फ़ाइलें हैं, यदि आप जावा में ऐसा करने जा रहे हैं, तो मैं java.util.zip लाइब्रेरी का उपयोग करूंगा। यद्यपि आपको अभी भी WARs और EARs में एम्बेडेड किसी भी JARs को फिर से खोलना होगा, यह आपको फ्लैट फ़ाइलों वाली निर्देशिकाओं के माध्यम से कदम उठाने की परेशानी बचाएगा। आप java.util.zip लाइब्रेरी द्वारा प्रदान की गई ज़िपफाइल के जारफाइल उप-वर्ग का भी उपयोग कर सकते हैं।

http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipFile.html

मैं भी शायद सिर्फ एक्सएमएल बाहर मुद्रण के लिए एक डोम पार्सर से परेशान नहीं होता। आप मेमोरी में एक (संभावित रूप से बड़ी) संरचना का निर्माण करेंगे जब आप एक स्ट्रीम में डेटा प्रिंट कर सकते हैं जैसे आप जाते हैं। इसके अलावा, पार्सर्स डेटा संरचना में XML को पार्स करने के लिए हैं, इसके विपरीत नहीं। मानक जावा डोम पार्सिंग क्लासेस, javax.xml.parsers.DocumentBuilderFactory और javax.xml.parsers.DocumentBuilder "प्रिंट" कमांड के साथ नहीं आते हैं। एक org.w3c.dom से स्वरूपित पाठ आउटपुट बनाने का मानक तरीका। दस्तावेज़ ऑब्जेक्ट एक एक्सएसएल ट्रांसफार्मर का उपयोग करना है (http://java.sun.com/webservices/reference/tutorials/jaxp/html/xslt.html#gghkq देखें) और फिर, यह संभवतः इसके लायक होने की तुलना में अधिक परेशानी है। मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप इस कार्यक्रम को कितना विस्तारित करना चाहते हैं, लेकिन यदि आपके पास यहां क्या है, तो उसे बस इतना करना होगा, मैं एक बड़ा डोम ऑब्जेक्ट नहीं बनाऊंगा।

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