A Salim
그는 물었다 12년 전
107

Jave lib 또는 app 변환할지 CSV XML 파일로?

기존 응용 프로그램이나 라이브러리에 java를 있는가 하면 'a' 나 '' XML 데이터 파일을 변환할 수 있는 CSV 파일?

Xml 태그 '를 통해 제공되는' 이 될 수 있는 첫 번째 행의 열 제목.

Paul Vargas
그는 7년 전 댓글을 달았습니다
43

이는 자바 태그 첫 번째 질문은 이런 것으로 보인다.

bjb568
그는 6년 전 댓글을 달았습니다
8

39, s 도 It& @paul 뿐만 아니라, 123!

Nadeem
그는 2년 전 댓글을 달았습니다
0

아니 그냥 # 39 의 url 에서 123 질문 유형 및 큐피드라는 that& y + 1 이 질문에 대한 답변 및 질문이예요 확증하노라 감사합니다!

Sir. Hedgehog
그는 일 년 전 댓글을 달았습니다
1

어쩐지 처음으로 게시물로의 for java 로 닫혀 이런 주제를 벗어난 d

답변 16 개

아마 이 도움이 됩니다. 조세파

Csv 파일 및 직렬화할 迈向 XML 이 툴을 통해 읽을 수 있습니다.

39 위, 내가 다른 어떤 길을 따라 don& 모르는 경우, 한 번에 사용할 준비가 돼 있지만, 이를 아주 단순해졌습니다 외부 라이브러리, 꼭 이래야겠어요 제안하세요:

오픈치프 의 구문 분석 CSV (작고 단순한 믿을 수 있고 쉽게 사용할 수 있습니다)

    • 스슬림 구문 분석 / 직렬화할 XML (아주 사용하기 쉽고, 완전히 만드는 사람이 읽을 수 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<String[]> item = new ArrayList<String[]>();
                    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();
        }
    }
}

나머지 정보정의다음 결과:. (스슬림 매우 미세한 튜닝을 통해 결과를 얻을 수 있습니다.)

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

내가 나를 가장 잘 알고 있지만, 이번 파업을 작업으로 주문하신거 자바 스크립트 언어를. 다음은 요약 (아주 단순해졌습니다) 솔루션 쓴 좋지!

  • 테스트리치프 *

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

  • 치프토스 라자흐로비 *

#!/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])
            }
        }
    }
}

다음 XML 을 쓰기뿐만 stdout:

<root>
  <entry id='1'>
    <string>hello world</string>
    <float1>1.0</float1>
    <float2>3.3</float2>
    <integer>4</integer>
  </entry>
  <entry id='2'>
    <string>goodbye world</string>
    <float1>1e9</float1>
    <float2>-3.3</float2>
    <integer>45</integer>
  </entry>
  <entry id='3'>
    <string>hello again</string>
    <float1>-1</float1>
    <float2>23.33</float2>
    <integer>456</integer>
  </entry>
  <entry id='4'>
    <string>hello world 3</string>
    <float1>1.40</float1>
    <float2>34.83</float2>
    <integer>4999</integer>
  </entry>
  <entry id='5'>
    <string>hello 2 world</string>
    <float1>9981.05</float1>
    <float2>43.33</float2>
    <integer>444</integer>
  </entry>
</root>

그러나 코드에 아주 단순해졌습니다 구문 분석 (고려하지 않은 인용 또는 이스케이프된 쉼표) 자리를 차지할 수 있는 데이터 않는다.

CloudyMarble
Peter Kelley
그는 12년 전 댓글을 달았습니다
0

Csv 라이브러리를 사용할 수 있도록 할 구문 분석 및 호출하십시오 수정표시와 구성기는. 너가 오토메이티드 변경하십시오 표시하십시오 이.

Alan Krueger
그는 10년 전 댓글을 달았습니다
0

왼쪽에 판독기에서 실습에서는?

내가 가지고 있는 오픈 소스 프레임워크입니다 CSV 작업 및 플랫 파일 일반적으로. # 39 에 달하는 아마 it& 보았으매: [제피리헬퍼스] [1].

도구키트 있는 콩, 사용하여 다음과 같은 코드를 작성할 수 있습니다

@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<Customer> engine = 
    new FileHelperEngine<Customer>(Customer.class);   
List<Customer> customers = 
    new ArrayList<Customer>();

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

39, ll 투명지에 수집 및 you& 객체에는 분석되었다.

도움이 되길 바란다!

[1]: http://jfilehelpers.com &quot JFileHelpers";

Brad Larson
Stephan
그는 8년 전 댓글을 달았습니다
0

+1 주석입니다 사용할 수 있다. 현재 죄송합니다. doesn& # 39, 이후 모든 프로젝트 별로 없는 것 같다고, 새 버전 11-08-2009.

kolrie
그는 8년 전 댓글을 달았습니다
0

39 시간은 아직 didn& 거절당했군요. # 39, s, t 계속하시겠습니까 개발 이후 하지만 it& 안정감이.

이 솔루션은 필요하지 않습니다, I know, CSV 또는 XML 라이브러리를 사용하지 않기 때문에 잘못된 문자 인코딩 문제 및 처리할 수 있으며, 확장하지만 관심을 갖는 것은 물론 분할합니다 저작물의 CSV 입력입니다 언약보다는 위에 언급된 규칙요.

  • 왜 안 Attention:* 모르면 이 코드를 사용하여, 또는 don& # 39 더 라이브러리 (가능한 일부 관료적 프로젝트) 를 사용할 수 있는 기회가 없다. 스트라이버퍼 를 사용하여 런타임 환경을 tfsnap.

그래서 여깄네요:

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<String> headers = new ArrayList<String>();
boolean isHeader = true;
int count = 0;
int entryCount = 1;
xml.append("<root>");
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<entry id=\"");
        xml.append(entryCount);
        xml.append("\">");
        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</entry>");
        xml.append(lineBreak);
        entryCount++;
    }
}
xml.append("</root>");
System.out.println(xml.toString());

입력 테스트리치프 (다른 답을 훔친 여기있을 페이지에서와:

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

그 결과 출력:

<root>
    <entry id="1">
        <string>hello world</string>
        <float1>1.0</float1>
        <float2>3.3</float2>
        <integer>4</integer>
    </entry>
    <entry id="2">
        <string>goodbye world</string>
        <float1>1e9</float1>
        <float2>-3.3</float2>
        <integer>45</integer>
    </entry>
    <entry id="3">
        <string>hello again</string>
        <float1>-1</float1>
        <float2>23.33</float2>
        <integer>456</integer>
    </entry>
    <entry id="4">
        <string>hello world 3</string>
        <float1>1.40</float1>
        <float2>34.83</float2>
        <integer>4999</integer>
    </entry>
    <entry id="5">
        <string>hello 2 world</string>
        <float1>9981.05</float1>
        <float2>43.33</float2>
        <integer>444</integer>
    </entry>
</root>

조세파 에서 가장 큰 차이점은 csv 로 즐길 수 있는 것이 너회의 java objects / etc / XML 파일을 직렬화할 자바 객체를 뒤로를 데즈리얼리즈 수 있습니다. # 39 에 의해 제어됩니다 주석입니다 it& 및 제어할 수 있는 많은 출력입니다.

또한 흥미로운 제피리헬퍼스 보인다.

이렇게 할 수 있습니다, 코드는 매우 판독값 Groovy 매우 쉽게 사용할 수 있습니다.

기본적으로 텍스트 변수는 각 행에 대해 쓴 '이' 와 ',' 콘타치s.1믈 콘타스데이타이치프 필드용 어레이입니다 각 열의 포함되어 있습니다.

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 = """<CLIENTS>
    <firstname> ${fields[2]} </firstname>
    <surname> ${fields[1]} </surname>
    <email> ${fields[9]} </email>
    <employeenumber> password </employeenumber>
    <title> ${fields[4]} </title>
    <phone> ${fields[3]} </phone>
    </CLIENTS>"""
}

Aminah Nuraini
Alan Krueger
그는 10년 전 댓글을 달았습니다
7

CSV 는 일반적으로 정도로 간단한 쉼표가 있는 것은 결코 소박하지만 분할합니다 충분합니다.

내가 왜 이 일을 이해하지 그녀의심장을 don& # 39. 화물숭배 코딩 거의 같은 들린다.

39, CSV 파일 변환 t 임의의 값을 XML 로 doesn& 추가. 이미 판독값 프로그램에 필요한 XML doesn& # 39, CSV 파일 도왔으매 한다는 빗나갔다.

반면 CSV 파일 읽기 쉽게 이해할 수 있는 XML 로 직렬화하는 중 다음 일에 something 값뿐만 높여줍니까 (뭐, 많이 내말들어봐 XML 을 사용하는 것은 아니다. ) 그래도 당신은 아마도 이미 XML 로 직렬화하는 중 있다는 것이다.

    • XSLT 사용할 수 있습니다. 예를 들어 구글 정보기술 (it), csv xml 로 몇 가지 예를 찾을 수 있습니다. 그런 다음 XML 을 사용하는 경우 XSLT 변환하십시오 있는모든 형식을 적용할 수 있습니다.

또한 优秀 라이브러리란 세르빙스믈 에서 대니얼 파커, 일반 텍스트 형식 XML 로 변환할 수 있는 거의 모든 뒤로를.

해당 안건에 대한 예는 korea. [here] [2]: 머리글 CSV 파일로 요소점 이름 필드에 XML 을 사용한다.

[2]: http://servingxml.sourceforge.net/examples/index.html # d62e305

이렇게 할 수 있는 건 아무것도 없다 난 너 없이는 적어도 먹어서나 조금 코드입니다. 2 개의 별도 라이브러리란 합니다.

  • CSV 파서 레임워크
  • Xml 직렬화하지 레임워크

Csv 파서 꼭 이래야겠어요 추천합니까 경우 직접 작성하는 방법을 조금 할 게 CSV 파서) 는 오픈치프 (sourceforge 프로젝트 '에 csv 는 데이터 분석)

Xml 직렬화하지 레임워크 제공하십시오 생각하신거야 확장할 수 있으며, 많은 경우에 대비하여 변형하려면 CSV 파일 (또는 큰) XML 로: 내 권장안을 는 Sun jave 스티리밍 당기십시오 구문 분석 수 있는 xml 파서 레임워크 (http://otl. here) 및 직렬화하지.

39, 라이브러리, there& 내린 것으로 알고 있지만 이를 수 있는 도구를 생산하는 s no 거침없이 쏟아냈다 당신꺼에요 영어로 번역하는 데 필요한 경우에만 쓸 수 있으며 CSV 의 XML 파서를 훅 제동 그러하매 CSV (또는 dell. 선택할 수 있는 XML jave library) 와 약간의 접착제 코드입니다.

잭슨 프로세서입니다 제품군은 단순히 JSON 데이터 형식, 여러 인스턴스용으로 백. 여기에는 두 XML (https://github.com/FasterXML/jackson-dataformat-xml) 와 CSV (https://github.com/FasterXML/jackson-dataformat-csv/) 백.

Csv (XML) 를 기반으로 판독값 변환 입력 (백 백 쓸 수 있을 것 "이라고 말했다. 이는 쉽게 할 수 있는 포조 엔트리입니다 한 행에 (csv) 의 경우 (또는 정의할 수 있습니다). Csv 의 엄격한 요구 사항을 내용으로 아닙니다, untyped&quot &quot 읽을 수 있다. 뿐만 아니라 (일련의 'String' 어레이에는) 이지만, 좀 더 单捞磐啊 XML 작업할 출력입니다.

Xml 의 a 면, 사용자가 필요로 하는 래퍼 루트 개체 어레이나 '목록' 직렬화할 개체 수 있습니다.

내가 필요한 경식도 애플리케이션과는 변환할지 CSV 파일 같은 문제 및 XML 파일 내 프로젝트 중 하나로 didn& 아무것도 찾을 순 있지만, t # 39 에서 Java 코드, 그래서 나는 내 자신의 스윙 치프토스믈 충분히 자유 및 응용 프로그램.

39 의 it& HERE 내 웹 사이트) 에서 확인할 수 있습니다. 희망 도움이 된다.

쉽게 할 수 없는 경우 자신의 코드를 한 것 같아요. 소스 코드는 δ1 jar 파일의 경우, 이 때문에 필요한 수정하십시오 doesn& # 39 요구사항에 칠 수 없다.

Csv 의 부품으로부터 마이 리틀 오픈 소스 라이브러리 사용할 수 있습니다.

Arne Burmeister
Magnilex
그는 6년 전 댓글을 달았습니다
1

다른 링크 라이브러리가 있습니까? 연결이 죽은입니다. 이 방식을 통해 정확한 이유는 https://partner. 국한됨 대답이 도스쿠라지드.

이 수 있지만, 너무 기본 또는 제한된 솔루션을 couldn& # 39, t you do a ['스트린g. 스프리트 ()'] [1] 의 기억, 각 행의 첫 번째 행을 XML 파일을 생성할 수 있으며, 그 결과 어레이입니다 line& # 39 의 어레이입니다 data-out 바닥에 그냥 각 각 요소를 통해 적절한 XML 패딩 이터레이션은 루프?

[1]: http://java.sun.com/j2se/7/docs/api/java/lang/String.html # 분리-정합성 (자바드란g. 스트레이)

Afshin Moazami
Alan Krueger
그는 10년 전 댓글을 달았습니다
2

Csv 파일의 경우, 이는 꽤 흔한 말을 들어 있는 쉼표는 데이터 판매업체에서 없습니다.