C# 将Xml转换为txt

C# 将Xml转换为txt,c#,xml,regex,text-files,C#,Xml,Regex,Text Files,我目前正在使用一个XML文件,它以XML格式保存比赛信息,如下所示 <Row xmlns="Practice2a"> <RecordType>Qualifying Classification</RecordType> <_x0030_02150Position>3</_x0030_02150Position> <Class>250</Class> <_x0030_02150MachineNo>

我目前正在使用一个XML文件,它以XML格式保存比赛信息,如下所示

 <Row xmlns="Practice2a">
<RecordType>Qualifying Classification</RecordType> 
<_x0030_02150Position>3</_x0030_02150Position> 
<Class>250</Class> 
<_x0030_02150MachineNo>11</_x0030_02150MachineNo> 
<RiderName>Kevin James</RiderName> 
<Machine>Honda</Machine> 
<_x0030_02150ToDBehind>29.680</_x0030_02150ToDBehind> 
<_x0030_02150BestLapSpeed>97.1415157615475</_x0030_02150BestLapSpeed> 
<_x0030_02150ToDBestLapTime>5:32.274</_x0030_02150ToDBestLapTime> 
<_x0030_02150BestOnLap>7</_x0030_02150BestOnLap> 
</Row>
我试图从文件中删除标记并创建一个txt文件,所以现在我得到了 我创建了一个行计数,可能用作提取正确字段的分隔符

139 Qualifying Classification
140 3
141 250
142 11
Driver Name: Machine Type: Kevin James
145 Honda
146 29.680
147 97.1415157615475
148 5:32.274
我的代码越来越失控,我想知道是否有更好的方法来实现这一点,而不是每次都加14,这就是我显示驱动程序名称的方式:“而不是数字


任何关于如何实现这一点的指示都是一个很好的洞察。

一个快速解决方案是在XmlDocument中读取xml(甚至对于数据集更简单),并在c代码中生成文本文件

见:

另一种方法是定义xslt,将xml重新格式化为您选择的布局。通常,这是从xml数据生成html文档的首选方法,但也可以用于转换为普通文本报告。您可以在


您可以使用LinqToXml对其进行解析和格式化:

using System.Xml.Linq

// [...]
// Load the XML, either from a string or from an url
var doc = XDocument.Parse(xmlString);

// or
var doc = XDocument.Load(new Uri(@"C:\myFile.xml"));

var result = String.Empty;

foreach (var el in doc.Descendants())
{
   // do something with it and format the data to your liking... e.g.
   result += FormatElement(el);
}

// or more compact
doc.Descendants().ToList().ForEach(el => result += FormatElement(el));

// [...]

private string FormatElement(XElement el)
{
   return String.Format("{0}: {1}", el.Name, el.Value);
}

当然,您需要根据自己的需要调整FormatElement方法,但此方案应该有效。

XML的设计使某些功能是必需的,并且可能依赖于这些功能,而其他功能则是文档作者的选择。您的方案似乎将这些功能完全向后移动!出现在哪一行不是guara一个完整的合法XML文件可能占用一行

XML的全部要点是,使用标准格式允许使用通用工具。.NET Framework中内置了(多个)XML解析组件,可以读取此文件并准确地为您提供所需的信息。然后,您可以将该信息以您喜欢的任何格式输出为文本

没有理由自己解析它

记住,如果您的解决方案包括正则表达式,那么您已经输了


(关于最后一部分,我是开玩笑的。有点像。)

我查看了所有的评论,认为这是实现我的目标的一种非常冗长的方式。在完成作者教程后,将xml读入数据集,这正是我所需要的。我可以按任何方式订购它们。我在VS中设置了一个类似的项目,但我不确定我的dataGridView需要什么DataMember,我尝试了dataGridView1.DataMember=“Rows”。但我收到“无法创建字段行的子列表”。我当前正在处理的XML类似于--种族分类有什么想法可以使用吗?。
using System.Xml.Linq

// [...]
// Load the XML, either from a string or from an url
var doc = XDocument.Parse(xmlString);

// or
var doc = XDocument.Load(new Uri(@"C:\myFile.xml"));

var result = String.Empty;

foreach (var el in doc.Descendants())
{
   // do something with it and format the data to your liking... e.g.
   result += FormatElement(el);
}

// or more compact
doc.Descendants().ToList().ForEach(el => result += FormatElement(el));

// [...]

private string FormatElement(XElement el)
{
   return String.Format("{0}: {1}", el.Name, el.Value);
}