powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как в XSLT описать таблицу с переменным числом колонок?
6 сообщений из 6, страница 1 из 1
Как в XSLT описать таблицу с переменным числом колонок?
    #39750888
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, не выводить колонку если выполняется какое либо условие.
При этом удалить и заголовок колонки и пересчитать colspan, где требуется.
Условия могут быть разными. Например,
в колонке нет значений;
сумма всех значений в колонке не больше какой либо величины;
ни одно из значений в колонке не больше определенной величины;
условие зависит от состояния другой колонки в связанном периоде;
колонка просто находится в определенном периоде;
etc.
Для начала, скажем убрать колонку "зарезервировано" в "январе" из прилагаемого файла.
...
Рейтинг: 0 / 0
Как в XSLT описать таблицу с переменным числом колонок?
    #39751488
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
горизонтальный скроллинг - ЗЛО

чтобы убрать пустые колонки в заголовке я бы сделал так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
<xsl:key name="distinct" match="//interval" use="@name"/>
	<xsl:key name="distinct_int" match="//*[name(..) = 'interval']" use="concat(name(), '.', ../@name)"/>
	<misc:translate>
		<approved>утверждено</approved>
		<appr_per_total>%</appr_per_total>
		<reserved>зарезервировано</reserved>
		<resrv_per_total>%</resrv_per_total>
		<resrv_dev_appr>отклонение</resrv_dev_appr>
		<rda_per_appr>%</rda_per_appr>
		<consumed>истрачено</consumed>
		<consm_per_appr>%</consm_per_appr>
		<consm_dev_appr>отклонение</consm_dev_appr>
		<cda_per_appr>%</cda_per_appr>
		<to_pay>к оплате</to_pay>
	</misc:translate>
	<xsl:variable name="trans" select="document('')/*/misc:translate"/>
	<xsl:variable name="header" select="//interval[generate-id(.) = generate-id(key('distinct',@name))]"/>
	<!--XHTML document outline-->
	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="ru">
			<head>
				<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
				<title>Рабочая смета</title>
				<link rel="stylesheet" type="text/css" href="stylesheet.css" />
			</head>
			<body>
				<h1>
          Рабочая смета 
					<xsl:value-of select="document/@company"/> за 
					<xsl:value-of select="document/@year"/> год по состоянию на 
					<xsl:value-of select="document/@actual_date"/>
				</h1>
				<table>
					<tr>
						<th rowspan="2">№</th>
						<th rowspan="2">статья</th>
						<xsl:for-each select="$header">
							<xsl:variable name="intchld" select="//*[name(..) = 'interval'][generate-id(.) = generate-id(key('distinct_int',concat(name(), '.', ../@name)))][../@name = current()/@name]"/>
							<th colspan="{count($intchld)}">
								<xsl:value-of select="@name"/>
								<xsl:value-of select="count($intchld)"/>
							</th>
						</xsl:for-each>
					</tr>
					<tr>
						<xsl:for-each select="$header">
							<xsl:variable name="intchld" select="//*[name(..) = 'interval'][generate-id(.) = generate-id(key('distinct_int',concat(name(), '.', ../@name)))][../@name = current()/@name]"/>
							<xsl:for-each select="$intchld">
								<th>
									<xsl:value-of select="name(current())"/>
									<br/>
									<xsl:value-of select="$trans/*[name() = name(current())]"/>
								</th>
							</xsl:for-each>
						</xsl:for-each>
					</tr>
					<xsl:apply-templates/>
				</table>
			</body>
		</html>
	</xsl:template>



PS если есть возможность - желательно изменить структуру xml документа хотя-бы выводя все поля с пустыми значениями, и правильно сентябрь
...
Рейтинг: 0 / 0
Как в XSLT описать таблицу с переменным числом колонок?
    #39752084
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait, спасибо.

Почему "горизонтальный скроллинг - ЗЛО" ( © vvvait )?
Неэффективно, даже если скроллинг применяется однократно, или с точки зрения чтения(понимания) документа?

В чем ошибка структуры? Мне казалась, что она нормализована и корректна.

Простите за возможно наивные вопросы. Это мой первый опыт знакомства с xml-xslt.
...
Рейтинг: 0 / 0
Как в XSLT описать таблицу с переменным числом колонок?
    #39752111
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Hopgarden, много причин, например:
на мышках обычно нет горизонтальной прокрутки
печать такого документа будет затруднительна
при просмотре желательно фиксировать 1 столбец, сделать это с помощью html очень сложно

в xsl v1 нет нормальных инструментов для группировки, поэтому лучше готовить для него xml без необходимости группировок,
например вывести нужные колонки заголовка отдельно.

если отзеркалить отчет по диагонали будет удобнее

если отчет просматривается в браузере, можно использовать JS для редактирования DOM дерева после его загрузки
...
Рейтинг: 0 / 0
Как в XSLT описать таблицу с переменным числом колонок?
    #39752335
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait, заказчик хочет видеть это именно в такой ориентации.

Поэтому единственный способ уменьшить простыню, это скрыть столбцы, не информативные по тем или иным причинам. Просмотр планируется исключительно в браузере при возможности редактировать или дополнительно обсчитывать в excel. Есть, правда, проблема редактирования в excel при открытии xml на сетевом ресурсе, теряется tmp файл... Будет копировать к себе, что я еще ему сделаю с одним SQL сервером.

И по вашему примеру у меня возник вопрос.
Как определить префикс пространства имен "misc"? По возможности внутри xslt. Хотя попытка создать еще один локальный xsd все равно ни к чему не привела.
...
Рейтинг: 0 / 0
Как в XSLT описать таблицу с переменным числом колонок?
    #39752426
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Hopgarden, там же где и все объявлены, в xsl:stylesheet
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как в XSLT описать таблицу с переменным числом колонок?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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