在Go中将通用csv转换为xml

时间:2014-01-17 11:03:40

标签: xml csv go

我正在尝试将通用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文件?

2 个答案:

答案 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)