我目前正在处理一个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文件,我只想以表格形式提供实物,例如
pos Name racetime and BestLaptime
我试图从文件中删除标签并创建一个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来计数,这就是我如何显示驱动程序名称:“而不是数字。
关于你如何做到这一点的任何指示将是一个伟大的洞察力。
答案 0 :(得分:1)
快速解决方案是在XmlDocument中读取xml(甚至更简单地读取数据集),并在c#代码中生成文本文件。
请参阅:
替代方法是定义一个xslt,将xml重新格式化为您选择的布局。通常,它是从xml数据生成html文档的首选方法,但可用于转换为普通文本报告。您可以在
上阅读更多相关信息答案 1 :(得分:1)
您可以使用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方法,但此方案应该有效。
答案 2 :(得分:0)
XML的设计使得某些功能是必需的并且可能依赖于它们,而其他功能则是文档作者的选择。你的计划似乎让这些功能完全倒退!标准不保证出现哪一行。整个合法的XML文件可能占用一行。
XML的重点在于使用标准格式允许使用通用工具。 .NET Framework内置了(多个)XML解析组件,可以读取此文件并为您提供所需的信息。然后,您可以以任何您喜欢的格式将该信息输出为文本。
没有理由自己解析它。
请记住,如果您的解决方案包含RegEx,那么您已经输了。
(我开玩笑说最后一部分。排序。)