powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / вопрос по XSLT
6 сообщений из 6, страница 1 из 1
вопрос по XSLT
    #32937063
Dilation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста, объясните чайнику!

Задача - вывести данные из обычного DataSet в Excel,
причем формат отчета довольно сложный, описывать его не буду так как это в общем-то неважно.
Решил что буду делать XML+XSLT=>XML.
Самые основные вещи понятны, в частности, каким должен быть XML для того чтобы его прочитал Excel написано вот тут .
Предположим, таблица из DataSet'a в исходном XML выглядит так:
<myTable>
<myColumn1>some data 1..<myColumn1>
<myColumn2>some data 2..<myColumn2>
...
</myTable>

Надо вывести ее на лист Excel, меняя стиль строк или отдельных ячеек в зависимости от их содержания (вроде бы классическая задача, но неужели никому не попадалась? нигде не встречал чтоб было разобрано..)
Пока что понял только, что можно использовать <xsl:choose>, загоняя целиком строки (<Row></Row>) внутрь тегов <xsl:when></xsl:when> и <xsl:otherwise></xsl:otherwise>. Но это неудобно, так как из-за того, что нужно всего-то для некоторых записей таблицы поменять ss:StyleID="Style1" на ss:StyleID="Style2", приходится копипастить целиком шаблон строки из одного <xsl:when> в другой.. короче, должно же быть что-то вроде переменных, которые потом можно подставить в тег? Как использовать <xsl:variable> и <xsl:param> в моем случае, если честно, не понимаю совсем (видимо не понимаю принципа их действия), хотя читал документацию по ним в MSDN, в общем смысл такой, как я понял, что им нельзя присваивать значения - а какие же это тогда переменные-то?

Вот XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

<xsl:template match="/">
<xsl:processing-instruction name="mso-application">
<xsl:text>progid="Excel.Sheet"</xsl:text>
</xsl:processing-instruction>
<Workbook>
<Styles>
<Style ss:ID="Style1" ss:Name="Style1">...</Style>
<Style ss:ID="Style2" ss:Name="Style2">...</Style>
</Styles>
<Worksheet >
<Table >
<xsl:apply-templates select="//myTable">
</Table>
</Worksheet>
</Workbook>
</xsl:template>

<xsl:template match="myTable">
<xsl:choose>
<xsl:when test="myColumn1='Style1'">
<Row ss:StyleID="Style1">
<Cell><Data ss:Type="String"><xsl:value-of select="myColumn1"/></Data></Cell>
<Cell><Data ss:Type="String"><xsl:value-of select="myColumn2"/></Data></Cell>
...
</Row>
</xsl:when>
<xsl:otherwise>
<Row ss:StyleID="Style2">
<Cell><Data ss:Type="String"><xsl:value-of select="myColumn1"/></Data></Cell>
<Cell><Data ss:Type="String"><xsl:value-of select="myColumn2"/></Data></Cell>
...
</Row>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

PS Да и с параметром test тега <xsl:when> тоже нифига не понятно, везде в документации про какой-то таинственный Expression, а что он из себя представляет, какой синтаксис, функции, операторы, как проверить на NULL и т.п. что-то нигде нифига.. все приходится методом тыка изучать :(

PPS Видимо у этого языка какая-то логика своя, которую я не понимаю..
А если ответ на непосредственный вопрос дать сходу сложно, то может быть, посоветуете почитать что-нибудь, чтоб врубиться во все это?

С уважением!
...
Рейтинг: 0 / 0
вопрос по XSLT
    #32937276
Если менять стиль надо в зависимотси от содержания тега <myColumnХХ>, то скорее всего это можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<xsl:template match="myTable">
<Row>
<!-- очень важное замечание, комментарии на русском не проходят в XSL УДАЛИТЬ!!! -->
<!-- точка в нижеследующей строке означает содержимое тега -->
<xsl:attribute name="ss:StyleID">
	<xsl:choose>
	<xsl:when test=". = что-то из содержимого">Style1</xsl:when>
	<xsl:otherwise>Style2</xsl:otherwise>
	</xsl:choose>
</xsl:attribute>
<Cell><Data ss:Type="String"><xsl:value-of select="myColumn1"/></Data></Cell>
...
</Row>
</xsl:template>

Вариант №2, если по имени тега(столбца)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xsl:template match="myTable">
<Row>
<xsl:attribute name="ss:StyleID">
	<xsl:choose>
	<xsl:when test="name() = 'myColumn1'">Style1</xsl:when>
	<xsl:otherwise>Style2</xsl:otherwise>
	</xsl:choose>
</xsl:attribute>
<Cell><Data ss:Type="String"><xsl:value-of select="myColumn1"/></Data></Cell>
...
</Row>
</xsl:template>

И еще. .зря чайником считаешь, шаблон почти готов.. Так держать.
С Уважением,
Измайлов Ф.В.
...
Рейтинг: 0 / 0
вопрос по XSLT
    #32937770
Dilation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
на <xsl:attribute> наткнуться не удалось - а он действительно решает много проблем.
...
Рейтинг: 0 / 0
вопрос по XSLT
    #32938190
Dilation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати
у меня есть в XSLT русский комментарий, вроде работает..
...
Рейтинг: 0 / 0
вопрос по XSLT
    #32938295
Значит я кодировку не меняю, надо будет разобраться.
...
Рейтинг: 0 / 0
вопрос по XSLT
    #32946747
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
незачем огород городить. Вывести в html с любым форматирование и у файла сделать расширение .xls. Эксел его прекрасно откроет, никаких преобразований через xslt, всё просто
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / вопрос по XSLT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]