2014-01-17 3 views
0

일반 csv 파일을 xml 파일로 변환하려고합니다. csv 파일에 헤더 행이 있습니다. 머리글 값은 요소 이름을 나타내고 각 열의 값은 해당 요소 값입니다. 지금까지일반 csv를 xml로 변환

내 방식 :

// Read the csv file 
file, err := os.Open(*i) 
if err != nil { 
    log.Fatalf("Error opening input file: %v\n", err) 
} 
defer file.Close() 

r := csv.NewReader(file) 
r.Comma, _ = utf8.DecodeRuneInString(*s) 
lines, err := r.ReadAll() 

// header values 
header := lines[0] 
// Write the xml file 
fileOut, err := os.Create(*o) 
if err != nil { 
    log.Fatalf("Error opening input file: %v\n", err) 
} 
defer fileOut.Close() 

for _, l := range lines { 
    for i, elem := range l { 
    // TODO: Something here is missing... 
    xml.EscapeText(fileOut, []byte(header[i])) 

    xml.EscapeText(fileOut, []byte(elem)) 

    } 

질문 : 어떻게 그것을 XML 쓰기 섹션 작업의 마지막 부분을 어떻게해야합니까? 아니면 CSV 파일을 XML 파일로 변환하는보다 효율적인 방법이 있습니까?

답변

1

없음 구조체로 CSV 데이터를 읽을 수있는 문제 다음 출력 XML을 없을 것

http://golang.org/pkg/encoding/csv/

http://golang.org/pkg/encoding/xml/

은 두 가지 솔루션 : 구조체, 필드 및 태그를 가져올 수있는 경우에만 데이터를 구조체에 반영 할 수 있습니다. 그런 다음 xml 패키지의 메소드를 사용하여 XML을 출력하십시오. 그러나, 나는 타격으로, 문자열로 작성, 바보하지만 쉬운 방법입니다 face.there 당신은 구조체를 모르는 경우 :

data := XML_HEADER 
data = data + "<records>\n" 
for i := 2; i < len(records); i++ { 
data = data + " <record " 
    for j := 0; j < len(records[i]); j++ { 
    data = data + head[j] + `="` + records[i][j] + `" ` 
             } 
data = data + "/>\n"    } 
data = data + "</records>" 
ioutil.WriteFile(xmlFileName, []byte(data), 0644) 
1

Go에는 CSV 및 XML 읽기 및 쓰기 지원 기능이 내장되어 있습니다.

체크 아웃 다음 패키지 : 그것은 파일에

+0

문제는 ** 일반 ** CSV입니다 - 즉,하지 명명 된 XML 필드가있는 구조체. –