জাভা লিব বা এক্সএক্স ফাইল এক্সপোর্ট রূপান্তর অ্যাপ?

জাভা এ একটি বিদ্যমান অ্যাপ্লিকেশন বা লাইব্রেরি রয়েছে যা আমাকে CSV ডাটা ফাইলকে xml ফাইল রূপান্তর করতে অনুমতি দেবে?

সম্ভাব্য প্রথম কলামের শিরোনাম সহ কলামটি xml ট্যাগ সরবরাহ করা হবে।

0
যোগ সম্পাদিত
মতামত: 5
মনে হচ্ছে এটি জাভাতে SO ট্যাগের ট্যাগের সাথে প্রথম প্রশ্ন।
যোগ লেখক Paul Vargas, উৎস
@ বিজবি 568 আপনি কি বলতে চাচ্ছেন?
যোগ লেখক CodingNinja, উৎস
@ বিজেব 568 ওহ! হা হা
যোগ লেখক CodingNinja, উৎস
@ পল শুধু তাই নয়, এটিও 123!
যোগ লেখক bjb568, উৎস
@ টোমি stackoverflow.com/q/123
যোগ লেখক bjb568, উৎস

16 উত্তর

এটি খুব মৌলিক বা একটি সমাধান সীমিত হতে পারে, কিন্তু আপনি একটি ফাইলের প্রতিটি লাইনের উপর স্ট্রিং.split() , এক্সএমএল জেনারেট করতে প্রথম লাইনের ফলাফল অ্যারে মনে রাখে , এবং প্রতিটি লাইনের অ্যারে ডাটাটি কি সঠিক xml উপাদানের সাথে বিস্ফোরিত করে একটি লুপ প্রতিটি পুনরাবৃত্তির প্যাডিং?

0
যোগ
যদি আপনার CSV ফাইলটি ডেটাতে উদ্ধৃত কমা অন্তর্ভুক্ত করে তবে তা মোটামুটি সাধারণ।
যোগ লেখক Alan Krueger, উৎস

আমি বুঝতে পারছি না কেন আপনি এটা করতে চান। এটি প্রায় মালামাল প্রথা কোডিং মত শব্দ।

একটি CSV ফাইল রূপান্তর xml এ কোন মূল্য যোগ করা হয় না। আপনার প্রোগ্রামটি ইতিমধ্যেই CSV ফাইলটি পড়ছে, তাই আপনাকে যুক্তি দেয় যে এক্সএমএল কাজ করে না।

অন্যদিকে, সিএসভি ফাইল পড়া, মানগুলি কিছু করে, এবং তারপর XML- এ serializingটি বোঝা যায় (ভাল, এক্সএমএল ব্যবহার করে যতটা বোঝা যায় ...;)) কিন্তু আপনি কল্পনানুসারে আগে থেকেই XML- এ সিরিয়ালাইজ করার একটি উপায় থাকতে পারে।

0
যোগ

আমি জানি আপনি জাভা জন্য জিজ্ঞাসা, কিন্তু এটি একটি স্ক্রিপ্টিং ভাষা উপযুক্ত কাজ হিসাবে আমাকে স্ট্রাইক। এখানে Groovy লিখিত একটি দ্রুত (খুব সহজ) সমাধান।

এ test.csv

string,float1,float2,integer
hello world,1.0,3.3,4
goodbye world,1e9,-3.3,45
hello again,-1,23.33,456
hello world 3,1.40,34.83,4999
hello 2 world,9981.05,43.33,444

এ csvtoxml.groovy

#!/usr/bin/env groovy

def csvdata = []
new File("test.csv").eachLine { line ->
    csvdata << line.split(',')
}

def headers = csvdata[0]
def dataRows = csvdata[1..-1]

def xml = new groovy.xml.MarkupBuilder()

// write 'root' element
xml.root {
    dataRows.eachWithIndex { dataRow, index ->
        // write 'entry' element with 'id' attribute
        entry(id:index+1) {
            headers.eachWithIndex { heading, i ->
                // write each heading with associated content
                "${heading}"(dataRow[i])
            }
        }
    }
}

Stdout- এ নিম্নলিখিত xml টি লিখেছেন:


  
    hello world
    1.0
    3.3
    4
  
  
    goodbye world
    1e9
    -3.3
    45
  
  
    hello again
    -1
    23.33
    456
  
  
    hello world 3
    1.40
    34.83
    4999
  
  
    hello 2 world
    9981.05
    43.33
    444
  

যাইহোক, কোড খুব সহজ প্যাডিং (অ্যাকাউন্ট উদ্ধৃত বা পালিত কমাতে গ্রহণ না) এবং এটি সম্ভাব্য অনুপস্থিত ডেটাগুলির জন্য অ্যাকাউন্ট করে না।

0
যোগ
ব্যায়াম পাঠক বামে?
যোগ লেখক Alan Krueger, উৎস
সুতরাং আপনি পার্সিং করতে একটি CSV লাইব্রেরি কল এবং তারপর মার্কআপ বিল্ডার ব্যবহার করতে পারে। হয়তো আপনি এই উত্তরটি দেখতে আপনার উত্তর সম্পাদনা করতে পারে।
যোগ লেখক Peter Kelley, উৎস

Maybe this might help: JSefa

আপনি এই টুল সহ CSV ফাইলটি পড়তে পারেন এবং এটি xml এ ক্রমিক করুন।

0
যোগ

আমার কাছে সিএসভি এবং ফ্ল্যাট ফাইলগুলির সাথে সাধারণভাবে কাজ করার জন্য একটি আনসার্স ফ্রেমওয়ার্ক আছে। হয়তো এটি মূল্যবান বলে মনে হচ্ছে: JFileHelpers

যে টুলকিট দিয়ে আপনি মটরশুঁচা ব্যবহার করে কোড লিখতে পারেন, যেমন:

@FixedLengthRecord()
public class Customer {
    @FieldFixedLength(4)
    public Integer custId;

    @FieldAlign(alignMode=AlignMode.Right)
    @FieldFixedLength(20)
    public String name;

    @FieldFixedLength(3)
    public Integer rating;

    @FieldTrim(trimMode=TrimMode.Right)
    @FieldFixedLength(10)
    @FieldConverter(converter = ConverterKind.Date, 
    format = "dd-MM-yyyy")
    public Date addedDate;

    @FieldFixedLength(3)
    @FieldOptional
    public String stockSimbol;  
}

এবং তারপর শুধুমাত্র আপনার টেক্সট ফাইল পার্স ব্যবহার:

FileHelperEngine engine = 
    new FileHelperEngine(Customer.class); 
List customers = 
    new ArrayList();

customers = engine.readResource(
    "/samples/customers-fixed.txt");

এবং আপনার পার্সেড বস্তুর সংগ্রহ থাকবে।

আশা করি এইটি কাজ করবে!

0
যোগ
টীকা ব্যবহারের জন্য +1 দুর্ভাগ্যবশত, আজকের মতো, মনে হয় যে এই প্রকল্পটিতে ২009-08-11 থেকে কোনও নতুন সংস্করণ নেই ...
যোগ লেখক Stephan, উৎস
হ্যাঁ, আমি তখন থেকে উন্নয়ন চালিয়ে যেতে সময় পাইনি কিন্তু এটি খুব স্থিতিশীল।
যোগ লেখক kolrie, উৎস

এই সমাধানটি কোনও CSV বা xml লাইব্রেরিগুলির প্রয়োজন হয় না এবং, আমি জানি, এটি কোনও অবৈধ অক্ষর এবং এনকোডিং বিষয়গুলি পরিচালনা করে না, তবে আপনি এতে আগ্রহী হতে পারেন, যদি আপনার CSV ইনপুট উপরে উল্লিখিত নিয়মগুলি ভাঙ্গেন না।

Attention: You should not use this code unless you know what you do or don't have the chance to use a further library (possible in some bureaucratic projects)... Use a StringBuffer for older Runtime Environments...

তাই এখানে আমরা যান:

BufferedReader reader = new BufferedReader(new InputStreamReader(
        Csv2Xml.class.getResourceAsStream("test.csv")));
StringBuilder xml = new StringBuilder();
String lineBreak = System.getProperty("line.separator");
String line = null;
List headers = new ArrayList();
boolean isHeader = true;
int count = 0;
int entryCount = 1;
xml.append("");
xml.append(lineBreak);
while ((line = reader.readLine()) != null) {
    StringTokenizer tokenizer = new StringTokenizer(line, ",");
    if (isHeader) {
        isHeader = false;
        while (tokenizer.hasMoreTokens()) {
            headers.add(tokenizer.nextToken());
        }
    } else {
        count = 0;
        xml.append("\t");
        xml.append(lineBreak);
        while (tokenizer.hasMoreTokens()) {
            xml.append("\t\t<");
            xml.append(headers.get(count));
            xml.append(">");
            xml.append(tokenizer.nextToken());
            xml.append("</");
            xml.append(headers.get(count));
            xml.append(">");
            xml.append(lineBreak);
            count++;
        }
        xml.append("\t");
        xml.append(lineBreak);
        entryCount++;
    }
}
xml.append("");
System.out.println(xml.toString());

ইনপুট test.csv (এই পৃষ্ঠায় অন্য একটি উত্তর থেকে চুরি করা হয়েছে):

string,float1,float2,integer
hello world,1.0,3.3,4
goodbye world,1e9,-3.3,45
hello again,-1,23.33,456
hello world 3,1.40,34.83,4999
hello 2 world,9981.05,43.33,444

ফলে আউটপুট:


    
        hello world
        1.0
        3.3
        4
    
    
        goodbye world
        1e9
        -3.3
        45
    
    
        hello again
        -1
        23.33
        456
    
    
        hello world 3
        1.40
        34.83
        4999
    
    
        hello 2 world
        9981.05
        43.33
        444
    

0
যোগ

জ্যাকসন প্রসেসর পরিবারের একাধিক ডেটা ফর্ম্যাটের জন্য ব্যাকডাউন রয়েছে, শুধু JSON নয়। এর মধ্যে রয়েছে উভয় xml ( https://github.com/FasterXML/jackson-dataformat-xml) এবং সিএসভি ( https://github.com/FasterXML/jackson-dataformat-csv/ ) ব্যাকেন্ড

রূপান্তরটি CSV ব্যাক-এন্ডের সাথে ইনপুট পড়ার উপর নির্ভর করবে, xml ব্যাকএন্ড ব্যবহার করে লিখুন এটি আপনার কাছে (বা সংজ্ঞায়িত করতে পারেন) প্রতি-সারি (CSV) এন্ট্রিগুলির জন্য POJO থাকলে এটি করা সহজ। এটি একটি কঠোর প্রযোজন নয়, যেহেতু CSV থেকে সামগ্রী "untyped" হিসাবেও পড়তে পারে ( স্ট্রিং এরেস এর একটি অনুক্রম), কিন্তু এক্সএমএল আউটপুটের উপর আরো কিছু কাজ প্রয়োজন।

এক্সএমএল পাশের জন্য, আপনি সিরিয়ালিয়ালের জন্য অ্যারে বা তালিকা ধারণ করার জন্য একটি রপার মূল বস্তুর প্রয়োজন হবে।

0
যোগ

For the CSV Part, you may use my little open source library

0
যোগ
আপনার লাইব্রেরি জন্য আপনার অন্য একটি লিঙ্ক আছে? লিঙ্কটি মৃত। এটি ঠিক কারণ লিঙ্ক শুধুমাত্র উত্তর doscouraged হয় উপায় দ্বারা এই হয়।
যোগ লেখক Magnilex, উৎস
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, এখানে উত্তরটির অপরিহার্য অংশগুলি অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্ক প্রদান করা আরও ভাল। সংযুক্ত পৃষ্ঠা পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তর অবৈধ হতে পারে। - পর্যালোচনা থেকে
যোগ লেখক Boo Berr'ita, উৎস

উপরে অন্যদের হিসাবে, আমি এটি করতে কোন এক ধাপে উপায় জানি না, কিন্তু যদি আপনি খুব সহজ বহিরাগত লাইব্রেরি ব্যবহার করতে প্রস্তুত থাকেন, আমি সুপারিশ করব:

OpenCsv for parsing CSV (small, simple, reliable and easy to use)

Xstream to parse/serialize xml (very very easy to use, and creating fully human readable xml)

উপরের নমুনা তথ্য ব্যবহার করে কোডটি দেখতে হবে:

package fr.megiste.test;

import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import au.com.bytecode.opencsv.CSVReader;

import com.thoughtworks.xstream.XStream;

public class CsvToXml {     

    public static void main(String[] args) {

        String startFile = "./startData.csv";
        String outFile = "./outData.xml";

        try {
            CSVReader reader = new CSVReader(new FileReader(startFile));
            String[] line = null;

            String[] header = reader.readNext();

            List out = new ArrayList();

            while((line = reader.readNext())!=null){
                List item = new ArrayList();
                    for (int i = 0; i < header.length; i++) {
                    String[] keyVal = new String[2];
                    String string = header[i];
                    String val = line[i];
                    keyVal[0] = string;
                    keyVal[1] = val;
                    item.add(keyVal);
                }
                out.add(item);
            }

            XStream xstream = new XStream();

            xstream.toXML(out, new FileWriter(outFile,false));

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

নিম্নলিখিত ফলাফল উত্পাদন: (Xstream ফলাফলের খুব সূক্ষ্ম টিউনিং দেয় ...)


  
    
      string
      hello world
    
    
      float1
      1.0
    
    
      float2
      3.3
    
    
      integer
      4
    
  
  
    
      string
      goodbye world
    
    
      float1
      1e9
    
    
      float2
      -3.3
    
    
      integer
      45
    
  
  
    
      string
      hello again
    
    
      float1
      -1
    
    
      float2
      23.33
    
    
      integer
      456
    
  
  
    
      string
      hello world 3
    
    
      float1
      1.40
    
    
      float2
      34.83
    
    
      integer
      4999
    
  
  
    
      string
      hello 2 world
    
    
      float1
      9981.05
    
    
      float2
      43.33
    
    
      integer
      444
    
  

0
যোগ

যতটা আমি জানি, আপনার জন্য এটি করার জন্য কোনও প্রস্তুতকৃত লাইব্রেরি নেই, তবে CSV থেকে xml এ অনুবাদ করতে সক্ষম একটি সরঞ্জাম তৈরি করা উচিত শুধুমাত্র একটি অশোধিত CSV পার্সার লিখতে এবং JDOM (অথবা আপনার xml জাভা লাইব্রেরি হুক আপ করা প্রয়োজন পছন্দ) কিছু আঠালো কোড সঙ্গে।

0
যোগ

আমি কিছুই জানি না যে আপনি এটি করতে পারেন কমপক্ষে একটি কোড বিট কোড লিখুন ছাড়া ... আপনি 2 পৃথক লাইব্রেরি প্রয়োজন হবে:

  • একটি CSV পার্সার ফ্রেমওয়ার্ক
  • একটি xml সিরিয়ালাইজেশন ফ্রেমওয়ার্ক

CSV পার্সার আমি সুপারিশ করব (যদি আপনি নিজের সিএসভি পার্সার লেখার জন্য একটু মজা করতে চান) হয় OpenCSV (CSV ডেটা পার্স করার জন্য একটি উৎস ফোর্জ প্রোজেক্ট)

এক্সএমএল সিরিয়ালাইজেশন ফ্রেমওয়ার্ক এমন কিছু হতে পারে যা আপনি বড় (বা বিশাল) CSV ফাইলে এক্সএমএমে রুপান্তর করতে চান এমন ক্ষেত্রে স্কেল হতে পারে: আমার সুপারিশ হল সূর্য জাভা স্ট্রিমিং xml পার্সার ফ্রেমওয়ার্ক (দেখুন এখানে ) যা pull-parseing এবং serialization এর অনুমতি দেয়।

0
যোগ

ড্যানিয়েল পার্কার দ্বারা ServingXML ভাল লাইব্রেরি রয়েছে, যেটি প্রায় সকল প্লেইন টেক্সট বিন্যাসে xml এবং রূপান্তর করতে সক্ষম। ।

আপনার কেসের উদাহরণটি এখানে পাওয়া যেতে পারে: এটি CSV এর ক্ষেত্রের শিরোনাম ব্যবহার করে xml উপাদান নাম হিসাবে ফাইল।

0
যোগ

আপনি Groovy ব্যবহার করে এটি অত্যন্ত সহজেই করতে পারেন, এবং কোড খুব পাঠযোগ্য।

মূলত, contact.datav এ প্রতিটি লাইনের জন্য টেক্সট ভেরিয়েবল contacts.xml তে লেখা হবে এবং ক্ষেত্রের অ্যারে প্রতিটি কলামে থাকবে।

def file1 = new File('c:\\temp\\ContactData.csv')
def file2 = new File('c:\\temp\\contacts.xml')

def reader = new FileReader(file1)
def writer = new FileWriter(file2)

reader.transformLine(writer) { line ->
    fields =  line.split(',')

    text = """
     ${fields[2]} 
     ${fields[1]} 
     ${fields[9]} 
     password 
    <title> ${fields[4]} </title>
     ${fields[3]} 
    """
}
0
যোগ
সিএসভি সহজ, কিন্তু সাধারণভাবে যথেষ্ট সহজ হয় না যে কমা উপর একটি বিভাজক যথেষ্ট।
যোগ লেখক Alan Krueger, উৎস

আপনি XSLT ব্যবহার করতে পারেন এটি Google এবং আপনি কয়েকটি উদাহরণ পাবেন উদাহরণস্বরূপ xml এ CSV আপনি যদি XSLT ব্যবহার করেন তবে আপনি যেকোন ফরম্যাটের xml রূপান্তর করতে পারেন।

0
যোগ

বড় পার্থক্য হল যে JSefa এ আসে যে এটি আপনার জাভা অবজেক্টগুলিকে CSV / xml / ইত্যাদি ফাইল এবং জাভা অবজেক্টে ফিরে deserialize করতে পারেন। এবং এটি টীকা দ্বারা চালিত যা আউটপুট উপর আপনি অনেক নিয়ন্ত্রণ দেয়।

JFileHelpers এছাড়াও আকর্ষণীয় দেখায়

0
যোগ

আমি একই সমস্যা ছিল এবং আমার প্রকল্পের এক জন্য একটি এক্সএমএল ফাইল থেকে একটি CSV ফাইল রূপান্তর একটি অ্যাপ্লিকেশন প্রয়োজন, কিন্তু নেট নেভিগেশন বিনামূল্যে এবং যথেষ্ট ভাল খুঁজে পাইনি, তাই আমি আমার নিজের জাভা সুইং CSVtoXML অ্যাপ্লিকেশন কোডেড

এটি আমার ওয়েবসাইট এখানে থেকে পাওয়া যায়। আশা করি এটা তোমাকে সাহায্য করবে।

যদি না হয়, আপনি আপনার নিজের মত কোডটি সহজেই করতে পারেন; সোর্স কোডটি জার ফাইলের ভিতরে আছে যাতে আপনার প্রয়োজনটি পূরণ না করা হলে তা পরিবর্তন করুন।

0
যোগ
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, এখানে উত্তরটির অপরিহার্য অংশগুলি অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্ক প্রদান করা আরও ভাল। সংযুক্ত পৃষ্ঠা পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তর অবৈধ হতে পারে। - পর্যালোচনা থেকে
যোগ লেখক Matthew Groves, উৎস