在 c# 中将 XML 文件转换为 csv 文件格式

本文关键字:文件 csv 格式 转换 中将 XML | 更新日期: 2023-09-27 18:36:07

我正在使用鼠标手势识别示例应用程序 accord.net 该应用程序,该应用程序以上述xml格式保存文件。我需要帮助将上述 xml 转换为 CSV 格式,以便我可以使用动态时间扭曲进行机器学习 accord.net 这样我就可以进行机器学习。我不知道如何转换为csv文件。

例如:261,210,261,214,261,

229,261,231

<?xml version="1.0"?>
<ArrayOfSequence xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Sequence>
    
    <SourcePath>
      <Point>
        <X>261</X>
        <Y>210</Y>
      </Point>
      <Point>
        <X>261</X>
        <Y>214</Y>
      </Point>
      <Point>
        <X>261</X>
        <Y>227</Y>
      </Point>
      <Point>
        <X>261</X>
        <Y>229</Y>
      </Point>
      <Point>
        <X>261</X>
        <Y>231</Y>
      </Point>
      <Point>
        <X>261</X>
        <Y>234</Y>
      </Point>
      <Point>
        <X>261</X>
        <Y>237</Y>
      </Point>
</Sequence>
</ArrayOfSequence>

在 c# 中将 XML 文件转换为 csv 文件格式

using System.IO;
using System.Xml.Serialization;

你可以这样做:

public class Sequence
{
    public Point[] SourcePath { get; set; }
}
using (FileStream fs = new FileStream(@"D:'youXMLFile.xml", FileMode.Open))
{
    XmlSerializer serializer = new XmlSerializer(typeof(Sequence[]));
    var data=(Sequence[]) serializer.Deserialize(fs);
    List<string> list = new List<string>();
    foreach(var item in data)
    {
        List<string> ss = new List<string>();
        foreach (var point in item.SourcePath) ss.Add(point.X + "," + point.Y);
        list.Add(string.Join(",", ss));
    }
    File.WriteAllLines("D:''csvFile.csv", list);
}

以另一种方式,您可以使用 XSLT 的强大功能来转换它,

步骤

  • 创建 Xml 样式表以将 xml 转换为 csv
  • 使用XslCompiledTransform()转换获取 csv 字符串
  • 将 CSV 字符串保存到文件

你可能会想出一个这样的Xslt,称之为data.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" version="1.0" encoding="UTF-8"/>
  <xsl:template match="/">
    <xsl:for-each select="//Point">
      <xsl:value-of select="X"/>,<xsl:value-of select="Y"/>
      <xsl:text>&#xD;&#xA;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

并使用以下方法

public static string ToCSV(string xmlTextDate, string xsltFile)
{
  string result = string.Empty;
  var xpathDoc = new XPathDocument(xmlTextDate);
  var xsltTransform = new System.Xml.Xsl.XslCompiledTransform();
  xsltTransform.Load(xsltFile);
  using (MemoryStream ms = new MemoryStream())
  {
      var writer = new XmlTextWriter(ms, Encoding.UTF8);
      using (var rd = new StreamReader(ms))
      {
          var argList = new System.Xml.Xsl.XsltArgumentList();
          xsltTransform.Transform(xpathDoc, argList, writer);
          ms.Position = 0;
          result = rd.ReadToEnd();
      }
  }
  return result;
}

并像这样称呼它

var csvString = ToCSV("yourfile.xml","data.xsl");

将XML直接转换为CSV是一项有点复杂的任务。相反,您可以先将 XML 转换为 DataSet,然后再转换为 CSV:

  1. 将 XML 转换为数据集:

    DataSet ds = new DataSet();
    ds.ReadXml(fileNamePath);
    
  2. 将数据表转换为 CSV。

    链接:c# 数据表到 csv

只需创建一个 XML 的 csv 文件,使用 System.IO 并确保该文件类似于

fileName = Name + ".csv"

阅读并寻找类似的东西

Path.GetTempPath(), fileName

我有点粗略,但这应该让你走上正确的轨道