преобразование XML в TXT - PullRequest
2 голосов
/ 18 мая 2011

В настоящее время я работаю с файлом 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>

Я хочу создать простой текстовый файл, содержащий лишь часть информации, я просто хочу в натуральном выражении в виде таблицы, например,

pos     Name      racetime    and BestLaptime

Я попытался удалить теги из файла и создать текстовый файл, так что теперь я получаю Я создаю счетчик строк, который можно использовать в качестве разделителей для выделения правильных полей.

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 для подсчета каждый раз, вот как я отображаю имя водителя: "вместо числа.

Любые указатели относительно того, как вы поступите, были бы отличным пониманием.

Ответы [ 3 ]

1 голос
/ 18 мая 2011

Вы можете проанализировать и отформатировать его с помощью 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 к вашим потребностям, но эта схема должна работать.

1 голос
/ 18 мая 2011

Быстрое решение состоит в том, чтобы прочитать ваш xml в XmlDocument (или даже проще для набора данных) и сгенерировать текстовый файл в вашем коде c #.

См:

Альтернативный подход заключается в определении xslt для переформатирования вашего xml в макет по вашему выбору. Обычно это предпочтительный подход для создания HTML-документов из ваших XML-данных, хотя его можно использовать для преобразования в обычные текстовые отчеты. Вы можете прочитать больше об этом на

0 голосов
/ 18 мая 2011

XML разработан таким образом, что некоторые функции требуются и могут зависеть от других, в то время как другие вещи выбираются автором документа. Ваша схема, кажется, получает эти функции точно в обратном направлении! На какой строке что-то появляется, не гарантируется стандартом. Весь допустимый XML-файл может занимать одну строку.

Весь смысл XML заключается в том, что использование стандартного формата позволяет использовать общие инструменты. .NET Framework имеет (несколько) встроенных в него XML-компонентов для разбора, которые могут читать этот файл и предоставлять именно ту информацию, которую вы ищете. Затем вы можете вывести эту информацию в виде текста в любом формате, который вам нравится.

Нет причин разбирать его самостоятельно.

И помните, что если ваше решение включает RegEx, значит, вы уже проиграли.

(Я шучу по поводу этой последней части. Вроде.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...