Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C语言将XML文件转换为CSV#_C#_Xml_Csv - Fatal编程技术网

C# 使用C语言将XML文件转换为CSV#

C# 使用C语言将XML文件转换为CSV#,c#,xml,csv,C#,Xml,Csv,我想使用C#将XML文件转换为CSV文件 2. 0 亚历克斯 0 0 杰克 2. 1. 荒地 0 0 布莱克 上面的XML是我的文件的结构示例,实际文件实际上要大得多。我有多个XML文件,每个XML文件的字段名都会改变。因此,我需要自动获取字段名及其值,并将其全部存储到CSV文件中。任何帮助都将不胜感激,因为我不熟悉CSV。这将帮助您将xml转换为CSV格式,但您需要从下载CSV阅读器 -一个开源库简化了将任何Xml文件转换为CSV文件的过程,只需很少的设置 使用下面的代码可以生成Xml s

我想使用C#将XML文件转换为CSV文件


2.
0
亚历克斯
0
0
杰克
2.
1.
荒地
0
0
布莱克

上面的XML是我的文件的结构示例,实际文件实际上要大得多。我有多个XML文件,每个XML文件的字段名都会改变。因此,我需要自动获取字段名及其值,并将其全部存储到CSV文件中。任何帮助都将不胜感激,因为我不熟悉CSV。

这将帮助您将xml转换为CSV格式,但您需要从下载CSV阅读器

-一个开源库简化了将任何Xml文件转换为CSV文件的过程,只需很少的设置

使用下面的代码可以生成Xml

string xml = @"<?xml version=""1.0""?>
<results>
    <results>
            <field>2</field>
            <something>0</something>
            <name>alex</name>
    </results>
    <results>
            <field>0</field>
            <something>0</something>
            <name>jack</name>
    </results>
    <results>
            <field>2</field>
            <something>1</something>
            <name>heath</name>
    </results>
    <results>
            <field>0</field>
            <something>0</something>
            <name>blake</name>
    </results>
</results>";

StringBuilder sb = new StringBuilder();
using (var p = ChoXmlReader.LoadText(xml))
{
    using (var w = new ChoCSVWriter(sb)
        .WithFirstLineHeader()
        )
        w.Write(p);
}

Console.WriteLine(sb.ToString());
签出CodeProject文章以获取更多帮助


免责声明:我是此库的作者。

我投票将此问题作为主题外的问题结束,因为OP没有显示解决此问题的重大努力。此问题太广泛。首先做一些研究,如果你有一个特定的编码问题,再来看看。关于CSV,没有什么需要“熟悉”的。每行文本有一条记录,字段之间用逗号分隔(根据数据,用双引号括起来)。学习一点XSLT,您很快就会有一个有效的解决方案。搜索序列化/反序列化您可以为此使用
LINQToXML
。搜索一个例子。
using (CsvWriter writer = new CsvWriter("users.csv"))
using (XmlRecordReader reader = new XmlRecordReader("users.xml", "users/user"))
{
reader.Columns.Add("field", "field");
reader.Columns.Add("something", "something");
reader.Columns.Add("name", "name");

writer.Write("field");
writer.Write("something");
writer.Write("name");
writer.EndRecord();

while (reader.ReadRecord())
{
    writer.Write(reader["field"]);
    writer.Write(reader["something"]);
    writer.Write(reader["name"]);
    writer.EndRecord();
}
reader.Close();
writer.Close();
}
string xml = @"<?xml version=""1.0""?>
<results>
    <results>
            <field>2</field>
            <something>0</something>
            <name>alex</name>
    </results>
    <results>
            <field>0</field>
            <something>0</something>
            <name>jack</name>
    </results>
    <results>
            <field>2</field>
            <something>1</something>
            <name>heath</name>
    </results>
    <results>
            <field>0</field>
            <something>0</something>
            <name>blake</name>
    </results>
</results>";

StringBuilder sb = new StringBuilder();
using (var p = ChoXmlReader.LoadText(xml))
{
    using (var w = new ChoCSVWriter(sb)
        .WithFirstLineHeader()
        )
        w.Write(p);
}

Console.WriteLine(sb.ToString());
field,something,name
2,0,alex
0,0,jack
2,1,heath
0,0,blake