2011-05-18 61 views
2

目前與我,保持比賽的信息以XML格式,像這樣將XML轉換爲TXT

<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文件的某些信息的XML文件的工作,我只是想在那種關在一個表格式如

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每次來算,那就是我如何顯示驅動程序名稱:」代替號。

任何指針,以你將如何去這將是一個很大的啓示。

回答

1

一個快速的解決辦法是閱讀的Xm​​lDocument的XML(或者也可以簡單到一個數據集),並生成文本file in your c#code。

參見:

另一種方法是定義一個XSLT來格式化XML到您選擇的佈局。通常,它是用於從xml datam生成html文檔的首選方法,但可用於轉換爲普通文本報告。你可以閱讀更多關於它的

+0

我看了看所有的評論,並決定這是一個很長時間的實現我的目標的方式。完成作者教程後,將xml讀入數據集,這幾乎是我所需要的。我可以以任何我想要的方式命令它們。 – user685590 2011-05-19 08:53:00

+0

我在VS中設置了一個類似的項目,但是我不確定DataGridView需要什麼DataMember,我嘗試過dataGridView1.DataMember =「Rows」。但是,我收到「子列表字段行不能創建」。 XML我目前工作的樣子 - - <行的xmlns = 「Race1」> 種族分類任何想法使用什麼? – user685590 2011-05-19 09:00:49

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方法你的需求,但這個計劃應該工作。

0

XML的設計使得某些功能是必需的,可能依賴於其他功能,而其他功能則是文檔作者的選擇。你的計劃似乎正好讓這些功能倒退!標準沒有保證哪一行出現。整個合法的XML文件可能佔用一行。

XML的重點在於使用標準格式允許使用通用工具。 .NET Framework內置了(幾個)XML解析組件,可以讀取該文件並準確提供您正在查找的信息。然後,您可以以任何您喜歡的格式將該信息輸出爲文本。

沒有理由自己解析它。

請記住,如果您的解決方案包含正則表達式,那麼您已經失去了。我在開玩笑說最後一部分。排序。)