将 Xml 转换为 txt
本文关键字:txt 转换 Xml | 更新日期: 2023-09-27 17:56:43
我目前正在使用一个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 计数,这就是我显示驱动程序名称:"而不是数字的方式。
任何关于您将如何做到这一点的指示都将是一个很好的见解。
一个快速的解决方案是在 XmlDocument 中读取 xml(甚至更简单的数据集),并在 c# 代码中生成文本文件。
看:
- 演练:将 XML 数据读入数据集
- 使用 XmlDocument 读取 XML 属性
另一种方法是定义一个 xslt 以将 xml 重新格式化为您选择的布局。通常,它是从xml数据生成html文档的首选方法,尽管可用于转换为普通文本报告。您可以在以下位置阅读更多相关信息
- W3学校 - XSLT
- XSLT 基础知识
您可以使用 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 的设计使得某些功能是必需的并且可能依赖于这些功能,而其他功能则由文档作者选择。您的方案似乎完全反向获取这些功能!标准不保证某物出现在哪一行上。整个合法 XML 文件可能占用一行。
XML的全部意义在于使用标准格式允许使用常用工具。.NET Framework 内置了(几个)XML 解析组件,这些组件可以读取此文件并准确为您提供所需的信息。然后,您可以将该信息输出为您喜欢的任何格式的文本。
没有理由自己解析它。
请记住,如果你的解决方案包括正则表达式,那么你已经输了。
(我开玩笑说最后一部分。有点。