2009-11-04 19 views
5

के साथ csv से xml में कनवर्ट करना मैं एक CSV फ़ाइल लेने और एक एक्सएमएल फ़ाइल के अनुरूप एक एक्सएमएल फ़ाइल उत्पन्न करने का एक पुन: प्रयोज्य तरीका खोजने की कोशिश कर रहा हूं। मुझे वास्तव में इसके लिए एक पुन: प्रयोज्य दृष्टिकोण नहीं मिला है। मैंने अल्टोवा मैपफोर्स का उपयोग किया है जो मुझे एक सीएसवी फ़ाइल और एक्सएसडी आयात करने देता है, इस से कोड उत्पन्न करने से मैपिंग करें, लेकिन जब भी एक्सएसडी बदलता है तो कोड को पुन: उत्पन्न करने की आवश्यकता होती है। अल्टोवा भी बहुत सारे कोड पैदा करता है।एक xsd

मेरा आदर्श समाधान जावा कक्षाओं का एक सेट होगा जो मैं एक एक्सएसडी को एक CSV फ़ाइल दे सकता हूं और इसमें से एक एक्सएमएल फ़ाइल प्राप्त कर सकता हूं। मुझे इस तरह कुछ भी नहीं मिला है और मैं संभावित रूप से कुछ बनाने के बारे में सोच रहा हूं।

विचार? क्या this प्रश्न के आधार पर एक्सएसएलटी का उपयोग करके यहां कुछ है?

धन्यवाद।

+1

आप एक xkcd का उपयोग कर के बारे में सोचा है? –

+0

आपको यह भी निर्दिष्ट करना चाहिए कि एक्सएसएलटी का कौन सा संस्करण आप उपयोग में प्रतिबंधित हैं (v1 या v2?) - यह सर्वोत्तम उत्तर में बड़ा अंतर बनाता है। साथ ही, क्या आप एक विक्रेता (कौन सा?) तक सीमित हैं, या क्या आपको विक्रेता/मंच स्वतंत्र समाधान की आवश्यकता है? –

उत्तर

7

ऐसा लगता है कि ऐसा करना आसान होगा, लेकिन ऐसा नहीं है। एक्सएमएल स्कीमा एक दस्तावेज़ सत्यापन भाषा है, न कि दस्तावेज़ उत्पादन भाषा। यह आपको एक नया दस्तावेज़ बनाने का तरीका नहीं बताता है; यह आपको बताता है कि आपके द्वारा बनाया गया दस्तावेज़ मान्य है या नहीं। वे एक लंबे शॉट से एक ही बात नहीं हैं।

उदाहरण के लिए, एक्सएमएल स्कीमा में जटिल प्रकार बनाने के लिए यह छोटा है जिसमें वैकल्पिक विकल्पों का अनुक्रम होता है। एक foo तत्व या तो एक bar या baz बच्चे, फिर या तो एक baz या bat बच्चे, तो एक foo, bar, या bat बच्चे हो सकता है।यही कारण है कि एक नियम निर्धारित कर सकते हैं कि कि इन तत्वों में से दोनों मान्य हैं के लिए बनाता है:

<foo> 
    <baz/> 
    <baz/> 
    <bar/> 
</foo> 

<foo> 
    <foo> 
     <bar/> 
    </foo> 
</foo> 

इसी समय, उस नियम आप कैसे डेटा मदों की एक टपल लेने के लिए और एक foo बनाने के लिए निर्धारित करने में काफी शून्य मदद देता है इससे तत्व

आम तौर पर, जब कोई इस प्रश्न से पूछता है, तो वे एक या दो स्कीमा देख रहे हैं जो वे उपयोग कर रहे हैं जो अपेक्षाकृत सरल दस्तावेज़ संरचना को परिभाषित करते हैं। ऐसा लगता है कि मैपिंग प्रक्रिया में इनपुट के रूप में उन स्कीमा का उपयोग करना आसान होना चाहिए। यह शायद है। क्या आसान नहीं है, या यहां तक ​​कि संभव है, एक मानचित्रण प्रक्रिया है जो किसी भी स्कीमा को इनपुट के रूप में ले सकती है।

मेरी परियोजनाओं में, मैंने इसके बजाय क्या किया है, समस्या को सरल बनाना है। मैंने प्रोग्राम बनाए हैं जो सीएसवी और एक्सएमएल का उपयोग करते हैं और स्कीमा सत्यापन का समर्थन करते हैं, लेकिन इन कार्यक्रमों में, स्कीमा आउटपुट है। मैं एक साधारण XML मेटाडाटा प्रारूप, जैसे परिभाषित किया है:

<item name="foo" type="string" size="10" allowNulls="true" .../> 
<item name="bar" type="date" allowNulls="false" .../> 

तब मैं CSV इनपुट से एक्सएमएल उत्पादन को नियंत्रित करने कि मेटाडाटा का उपयोग कर सकते हैं, और मैं भी इसका इस्तेमाल कि XML मेरा कार्यक्रम एक स्कीमा निर्माण करने के लिए कर सकते हैं उत्पादन के अनुरूप होगा। अगर मैं अपना मेटाडाटा बदलता हूं, तो मेरा एक्सएमएल और स्कीमा उचित रूप से बदलता है।

बेशक, यदि स्कीमा वास्तव में आपकी प्रक्रिया में इनपुट हैं (उदाहरण के लिए वे किसी तृतीय पक्ष द्वारा प्रदान की जाती हैं), तो यह आपकी सहायता भी शुरू नहीं करेगा।

+0

मुझे आपका समाधान पसंद है लेकिन यह मेरी वर्तमान जरूरतों के लिए बहुत अच्छी तरह से काम नहीं करेगा। स्कीमा, जबकि किसी तृतीय पक्ष द्वारा प्रदान नहीं किया जाता है, परिवर्तन के अधीन होता है (यद्यपि अक्सर नहीं), लेकिन उपयोगकर्ता हमेशा एक एक्सेल टेम्पलेट का उपयोग करेंगे जो हम उन्हें प्रदान करते हैं। मैं कुछ ऐसे क्षेत्रों को देख सकता हूं जहां मुझे लगता है कि यह बहुत उपयोगी होगा हालांकि! धन्यवाद! – Casey

+0

मैं इस बात से सहमत नहीं हूं कि यह करना आसान नहीं है। यह करना एक आसान बात है। यह एक आम समस्या है और इसे हल किया गया है (एक्सएसएलटी वी 2 उपयोगकर्ताओं के लिए)। –

+0

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

2

ठीक है, मैं वास्तव में एक रेडीमेड, आउट-ऑफ-द-बॉक्स इस के लिए समाधान की जरूरत नहीं है, लेकिन शायद:

  • अपनी CSV FileHelphers की तरह एक पुस्तकालय के साथ फाइल को पढ़ने; [XmlIgnore], [XmlAttribute] तरह जिम्मेदार बताते हैं इस के लिए, आप एक वर्ग MyDataType जो सीएसवी में स्तंभों का वर्णन करता है बनाने की जरूरत है, और अगर आप उचित एक्सएमएल क्रमबद्धता के साथ उस वर्ग को सजाने आप MyDataType

  • की एक सरणी मिल और इसके आगे, आप बस एक एक्सएमएल है कि आपके XML स्कीमा के अनुरूप में MyDataType की जिसके परिणामस्वरूप सरणी बाहर क्रमानुसार करने में सक्षम हो सकता

  • या कि अगर काम नहीं करता है, तो आप एक वर्ग कि आपकी XML आवश्यकताओं (से उत्पन्न करने के लिए नक्शे बना सकते हैं आपके पास एक्सएसडी है), और बस दो प्रकार के MyDataType (अपने सीएसवी से) औरके बीच मैपिंग को परिभाषित करेंAutoMapper

की तरह कुछ के साथ (अपने XML के लिए) यह बॉयलर-प्लेट नहीं है - लेकिन काफी करीब है, और आप संभवतः है कि काफी एक "रूपरेखा" बस अपने खुद के प्रकार में प्लग करने के लिए कर सकता है (यदि आप इसे अक्सर करने की आवश्यकता है)।

0

आपके पास एक "टेबल" (सीएसवी फ़ाइल) है जिसमें (संभवतया) एक (संभवतः) पदानुक्रमित डेटा मॉडल का प्रतिनिधित्व करने वाली पंक्तियों को (संभवतः) denormalized पंक्तियां शामिल हैं। आप एक्सएसडी के आधार पर इसे मनमाने ढंग से पदानुक्रमित XML दस्तावेज़ में मैप करना चाहते हैं।

आपको एक ऐसे टूल की आवश्यकता होगी जो एक्सएमएल तत्वों को समूहबद्ध कुंजी कॉलम मैप कर सकती है और निर्दिष्ट कर सकती है कि कौन से डेटा कॉलम गुण/बाल तत्व हैं। यह एक काफी महत्वपूर्ण समस्या है, जब तक कि आपकी मैपिंग छोटी न हो।

क्या आप सीएसवी और एक्सएसडी के कुछ नमूने पोस्ट कर सकते हैं? इससे अधिक केंद्रित उत्तर प्राप्त करने में मदद मिल सकती है।

0

माइक्रोसॉफ्ट एक्सेल एक्सएमएल निर्यात करने में सक्षम है: http://office.microsoft.com/en-us/excel-help/export-xml-data-HP010206401.aspx

मैं एक निर्यात योग्य XSD प्रारूप बनाने के साथ कुछ समस्या थी, लेकिन यह एक सच में महान उपकरण एक बार आप यह काम कर रहा है है।

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