порекомендуйте книгу для вдумчивого изучения xslt.
Хорошую книгу по XSLT я рекомендовал
здесь.
Теперь по поводу
никакой конкретики пока нет....
Я тебе обозначил способ, при котором для одних и тех же данных XML ты можешь формировать совершенно
разные визуальные представления, за счёт подключения того или иного XSLT файла. Насколько я тебя понял, ты именно об этом спрашивал -
о том, как для одних и тех же данных формировать разные визуальные представления, не внося правку в код и в исходную структуру данных (с последующим импортом результата преобразований в MS Excel).
Например в браузере твой XML будет
выглядеть как HTML страничка с грамотно оформленной таблицей (цвета, толщины, объединения ячеек, ширины столбцов и т.д. и т.п.). Но по факту, за кулисами это будет не HTML а XML, в чём ты можешь убедиться, выбрав в браузере из контекстного меню этой страницы пункт "
Просмотр HTML-кода".
Если ты хочешь быть уверенным в корректности структуры XML, с которым ты работаешь, то для этого подключаешь к нему свою схему XSD.
Теперь по поводу импорта в Excel результата, сгенерированного посредством XSLT...
К сожалению, MS Excel пока не в состоянии самостоятельно корректно обрабатывать XSLT, поэтому в справке Excel рекомендуется сохранить результат преобразования XSLT в файл и затем производить импорт именно этого сохранённого результата (выше я показывал скрин справки и красным обвёл этот момент). Собственно, как ты уже знаешь, программно результат применения XSLT получаем так:
String inputFile = @".\in.xml";
String transformFile = @".\in.xsl";
String outputFile = @".\out.xml";
UTF8Encoding encoding = new System.Text.UTF8Encoding(false); // UTF-8 без BOM
XslCompiledTransform myXslTransform = new XslCompiledTransform();
myXslTransform.Load(transformFile);
using (XmlReader reader = XmlReader.Create(inputFile)) {
using (MemoryStream ms = new MemoryStream()) {
using (XmlWriter writer = XmlWriter.Create(ms)) {
myXslTransform.Transform(reader, writer);
ms.Flush();
ms.Position = 0;
using (XmlReader reader2 = XmlReader.Create(ms)) {
XDocument xmlDoc = XDocument.Load(reader2, LoadOptions.None);
xmlDoc.Declaration.Encoding = encoding.ToString();
using (XmlTextWriter writer2 = new XmlTextWriter(outputFile, encoding)) {
writer2.Formatting = Formatting.Indented;
xmlDoc.Save(writer2);
}
}
}
}
}
При желании можно выполнить это и вручную, хотя это будет и не самый лучший вариант... Пошаговое описание действий, выполняемых вручную (скрины к ним смотри ниже) по импорту XML данных в Excel
в том виде, в котором благодаря XSLT они отображаются в браузере:
1. В браузере открываешь свой XML файл, к которому подключен нужный тебе XSLT, и отображаемую страницу ты первым делом сохраняешь (Ctrl + S) как HTML файл.
2. В MS Excel запускаешь команду импорта XML.
3. В диалоговом окне
Выбор источника данных в качестве фильтра указываешь
Все файлы и выбираешь сохранённый тобой HTML файл.
4. В диалоговом окне
Создание веб-запроса устанавливаешь галочку возле левого верхнего угла твоей таблицы и затем жмёшь кнопку Параметры...
5. В диалоговом окне
Настройка веб-запроса выбираешь опцию
Полностью формат HTML и жмёшь кнопку Ок.
6. Теперь в диалоговом окне
Создание веб-запроса жмёшь кнопку
Импорт.
7. Откроется диалоговое окно
Импорт данных, в котором ты можешь указать левую верхнюю ячейку для вставки данных, а так же, при необходимости, настроить некоторые свойства. Жми кнопку Ок.
Всё. В твоём Excel файле появляется таблица точно в том виде, который она имела в HTML который, в свою очередь был создан посредством применения некоторого XSLT к твоему XML файлу данных.
Прилагаю модифицированную под твой вопрос копию плагина
SelSim - копия.zip (для наглядности, именно с неё сделаны скрины). В этой модификации я внёс изменения в файл
./support/appinfo.xslt (убрал лишнюю информацию, не нужную для данного примера), дабы в браузере содержимое файла
./settings/info/appinfo.xml отображалось лишь в виде таблицы, игнорируя ту часть данных, которая к таблице не относится. Попробуй выполнить обозначенные мною выше пункты 1-7 на файле
./settings/info/appinfo.xml, для примера.[/code]