【问题标题】:converting Xml to txt将 Xml 转换为 txt
【发布时间】:2011-08-28 03:57:53
【问题描述】:

我目前正在使用一个 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 来计数,这就是我显示 Driver Name:" 而不是数字的方式。

任何关于你将如何去做的指示都会是一个很好的见解。

【问题讨论】:

    标签: c# xml regex text-files


    【解决方案1】:

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

    见:

    另一种方法是定义一个 xslt 以将您的 xml 重新格式化为您选择的布局。通常,它是从您的 xml 数据生成 html 文档的首选方法,但可用于转换为普通文本报告。你可以阅读更多关于它的信息

    【讨论】:

    • 我查看了所有的 cmets 并认为这是实现我的目标的一个非常冗长的方法。完成作者教程后,将 xml 读入数据集,这就是我所需要的。我可以随心所欲地订购它们。
    • 我在 VS 中建立了一个类似的项目,但是我不确定我的 dataGridView 需要什么 DataMember 我试过 dataGridView1.DataMember = "Rows" 。但我收到“无法创建字段行的子列表”。我目前正在处理的 XML 看起来像 - - Race Classification RecordType> 有什么想法可以使用吗?。
    【解决方案2】:

    您可以使用 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 方法,但是这种方案应该可以工作。

    【讨论】:

      【解决方案3】:

      XML 的设计使得某些特性是必需的并且可能是依赖的,而其他特性则由文档的作者选择。您的方案似乎完全倒退了这些功能!标准不保证某物出现在哪一行。一个完整的合法 XML 文件可能只占一行。

      XML 的全部意义在于使用标准格式允许使用通用工具。 .NET Framework 具有(几个)内置的 XML 解析组件,可以读取此文件并准确地为您提供您正在寻找的信息。然后,您可以将该信息输出为您喜欢的任何格式的文本。

      没有理由自己解析。

      请记住,如果您的解决方案包含 RegEx,那么您已经输了。

      (我在开玩笑说最后一部分。有点。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-12
        • 2017-06-18
        • 1970-01-01
        • 2013-08-18
        • 2020-02-24
        • 2015-10-13
        • 2016-10-18
        • 2021-06-05
        相关资源
        最近更新 更多