powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Построение дерева (xsl)
8 сообщений из 8, страница 1 из 1
Построение дерева (xsl)
    #36376122
krasovcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Нужно разработать фиксированный xsl-документ, который при трансформации
любого xml-документа дает html, показывающий исходный xml. При этом должна быть возможность скрытия\раскрытия блоков xml.

Что у меня получилось:

Код: plaintext
1.
2.
3.
4.
...
<body>
    <xsl:apply-templates mode="drawingElement"/>
</body>
...

Код: plaintext
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.
<xsl:template match="*" mode="drawingElement">
	<div class="Node">
		<!-- отступы -->
		<xsl:apply-templates select="ancestor::*" mode="indent"/>
		<!-- кол-во детей у текущего элемента --> 
		<xsl:variable name="c" select="child::*"/>
		<xsl:choose>
			<xsl:when test="count($c) > 0">
			<!-- отрисовываем элемент дерева в виде ссылыки с иконкой раскрытия\скрытия -->
				<xsl:variable name="index" select="generate-id(.)"/>
				<a id="{$index}" href="#" class="tag" onclick="showHideBlock(this);">
					<img src="minus.jpg" width="8px" height="7px"/> 
					<span class="bracket"><</span>
						<xsl:value-of select="name(.)"/>
					<span class="bracket">></span>
				</a>
				
				<!-- отрисовываем закрывающий тег -->
				<div style="display: inline;">
					<!-- вызов шаблона для детей текущего элемента -->
					<xsl:apply-templates mode="drawingElement"/>
					
					<xsl:apply-templates select="ancestor::*" mode="indent"/>
					<span class="bracket"><</span>
					<span class="tag">
						<xsl:value-of select="name(.)"/>
					</span>
					<span class="bracket">/></span>
				</div>
				
			</xsl:when>
			<xsl:otherwise>
				<!-- если нет детей -->
				<span class="bracket"><</span>
					<span class="tag"><xsl:value-of select="name(.)"/></span>
				<span class="bracket">/></span>        
			</xsl:otherwise>
		</xsl:choose>
	</div>
</xsl:template>

Код: plaintext
1.
2.
3.
<!-- отступы -->
<xsl:template match="*" mode="indent">
	<xsl:text>    </xsl:text>
</xsl:template>

Возникла пара проблем:
1. Непонятно как перебрать все атрибуты тега и продублировать их в html. Сейчас, если есть тег
<some_tag attr1="test"/> , xsl вернет просто <some_tag/>

2. Каким образом можно отличить <some_tag/> от <some_tag>text</some_tag>

У меня совершенно нет опыта работы с xsl и поэтому может я двигаюсь в неправильном направлении. Есть какие-нибудь идеи?
...
Рейтинг: 0 / 0
Построение дерева (xsl)
    #36376130
krasovcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со списком атрибутов разобрался таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:value-of select="name()"/>
<xsl:element name="{name()}">
    <xsl:for-each select="@*">
        <xsl:element name="{name()}">
                     <xsl:value-of select="name(.)"/>
		    <span class="blue">="</span>
		    <span class="black"><xsl:value-of select="."/></span>
			<span class="blue">"</span>
	</xsl:element>
     </xsl:for-each>
     <xsl:apply-templates select="*|text()"/>
</xsl:element>

Только, не отображается атрибут title ... непонятно почему, с остальными всё ок
...
Рейтинг: 0 / 0
Построение дерева (xsl)
    #36376140
krasovcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, все проблемы решил ... чуть позже выложу, то что вышло (нужно причесать).
...
Рейтинг: 0 / 0
Построение дерева (xsl)
    #36376409
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krasovchegНужно разработать фиксированный xsl-документ, который при трансформации
любого xml-документа дает html, показывающий исходный xml. При этом должна быть возможность скрытия\раскрытия блоков xml.Чем не устраивает стандартное отображение в IE?
...
Рейтинг: 0 / 0
Построение дерева (xsl)
    #36376471
krasovcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_krasovchegНужно разработать фиксированный xsl-документ, который при трансформации
любого xml-документа дает html, показывающий исходный xml. При этом должна быть возможность скрытия\раскрытия блоков xml.Чем не устраивает стандартное отображение в IE?

Всё устраивает, просто такое задание ... Прикрепил поправленный вариант (вдруг пригодится).
Осталась одна проблемка, в ie, при открытии xml-документа, отображаются строчки декларации.

Пример:

Код: plaintext
1.
  <?xml version="1.0" encoding="utf-8" ?> 
  <?xml-stylesheet type="text/xsl"?> 

Мне не удалось добраться до них и отобразить, если кто знает - буду признателен.

P.S. В xsl не силен, буквально в пятницу услышал первый раз, так что код может быть говняненьким)
...
Рейтинг: 0 / 0
Построение дерева (xsl)
    #36376496
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krasovchegОсталась одна проблемка, в ie, при открытии xml-документа, отображаются строчки декларации.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  <xsl:template match="/">
    <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="processing-instruction()">
    <xsl:processing-instruction name="{name(.)}">
      <xsl:value-of select="."/>
    </xsl:processing-instruction>
  </xsl:template>
А есть еще комментарии и секции CDATA
...
Рейтинг: 0 / 0
Построение дерева (xsl)
    #36376722
krasovcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, очень помогли ... как то я подзабыл про комменты и дата, надо будет доделать
...
Рейтинг: 0 / 0
Построение дерева (xsl)
    #36376741
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще есть разные пространства имен

С уважением, Vasilisk
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Построение дерева (xsl)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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