Обновлено, чтобы быть ясным.
Шаг первый: у меня есть файл XML, который я хочу загрузить в DatGridView. (В основном работает благодаря Максу, но у меня все еще есть проблема с накопительным пакетом XML)
Шаг второй: запустить некоторый код на основе пользовательского ввода - (не является частью этого решения)
Шаг третий: экспорт DataGridView в файл CSV. (Решено Максом! Спасибо, мужик. Именно это я и пытался сделать в этой части.)
Использование VS 2008 C #
(Создан новый проект)
Пример из файла XML cars.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<car>
<year>2010</year>
<make>Chevy</make>
<model>Surburban</model>
<color-e>Black</color-e>
<color-i>Black</color-i>
<features>
<Engine>8 cylinder</Engine>
<gas>Petrol</gas>
<doors>5</doors>
<miles>12312</miles>
</features>
</car>
<car>
<year>2001</year>
<make>Ford</make>
<model>Excursion</model>
<color-e>Black</color-e>
<color-i>Black</color-i>
<features>
<Engine>10 cylinder</Engine>
<gas>Petrol</gas>
<doors>5</doors>
<miles>90312</miles>
</features>
</car>
<car>
<year>1999</year>
<make>Chevy</make>
<model>corvette</model>
<color-e>Silver</color-e>
<color-i>Black</color-i>
<features>
<Engine>8 cylinder</Engine>
<gas>Petrol</gas>
<doors>3</doors>
<miles>44222</miles>
</features>
</car>
</root>
Это приложение winform.
Он имеет две кнопки, одно текстовое поле и одно представление данных.
Кнопка 1 должна загрузить данные XML в сетку данных.
Затем кнопка два должна сохранить данные из таблицы данных в CSV-файл.
Вот код, который я до сих пор открывал и загружал xml в представление данных.
namespace carsXML
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var cars = XDocument.Load(@"C:\cars.xml");
var query = from c in cars.Descendants("car")
select new
{
Year = (string)c.Element("year").Value,
Make = (string)c.Element("make").Value,
Model = (string)c.Element("model").Value,
// I needed to step directly into the sub element.
gas = (string)c.Element("features").Element("gas").Value,
doors = (string)c.Element("features").Element("doors").Value,
miles = (string)c.Element("features").Element("miles").Value
};
dataGridView1.DataSource = query.ToList();
}
private void button2_Click(object sender, EventArgs e)
{
dataGridView1.ExportToCSV(@"C:\cars-griddump.csv");
//Added Class Max showed me. This works, I have only tested it on a small
// XML file so far but it seems to work exactly as I wanted.
}
}
}
Получает элементы прямо под элементом автомобиля. Когда он попадает в элемент функции, приложение вылетает. (нулевой код и т. д.)
Итак, последняя часть этого, прежде чем я закончу с этим небольшим проектом, - это выяснение XML-накопления. Когда код читает элементы автомобиля, он получает все подчиненные элементы, которые находятся непосредственно под машиной. Сбой, когда он попадает к элементу, который имеет дополнительные подэлементы, и не добавляет их к представлению данных.
// Исправлена проблема с накоплением. Это заняло у меня некоторое время!
// Спасибо за помощь!