我正在尝试将通用csv文件转换为xml文件。 csv文件有一个标题行。标题值表示元素名称,相应列中的值是相应的元素值。
到目前为止我的方法:
// 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文件?
答案 0 :(得分:1)
Go内置支持读写CSV和XML。
检查以下包裹:
http://golang.org/pkg/encoding/csv/
http://golang.org/pkg/encoding/xml/
将CSV数据读入结构然后将XML输出到文件
应该没有问题答案 1 :(得分:1)
这是两个解决方案: 只有在可以获取结构,字段和标记时,才能将数据反映到结构中。然后通过xml包中的方法输出XML。 但是,如果你不知道我面对的结构。有一种愚蠢而又简单的方法,写作字符串,作为打击:
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)