猿问

在 Go 中将通用 csv 转换为 xml

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


aluckdog
浏览 235回答 2
2回答

拉风的咖菲猫

有两种解决方案:您可以将数据反映到结构中,只有当您可以获得结构,字段和标签时。然后通过 xml 包中的方法输出 XML。但是,如果你不知道我面临的结构。有一个愚蠢但简单的方法,写成字符串,作为打击:data := XML_HEADERdata = data + "<records>\n"for i := 2; i < len(records); i++ {&nbsp;data = data + "&nbsp; <record "&nbsp; for j := 0; j < len(records[i]); j++&nbsp; {&nbsp; &nbsp;data = data + head[j] + `="` + records[i][j] + `" `&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;data = data + "/>\n"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;data = data + "</records>"&nbsp;ioutil.WriteFile(xmlFileName, []byte(data), 0644)
随时随地看视频慕课网APP

相关分类

Go
我要回答