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

Нужно разработать фиксированный 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
20.12.2009, 09:10
    #36376130
krasovcheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева (xsl)
Со списком атрибутов разобрался таким образом:

Код: 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
20.12.2009, 09:45
    #36376140
krasovcheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева (xsl)
Всё, все проблемы решил ... чуть позже выложу, то что вышло (нужно причесать).
...
Рейтинг: 0 / 0
20.12.2009, 16:46
    #36376409
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева (xsl)
krasovchegНужно разработать фиксированный xsl-документ, который при трансформации
любого xml-документа дает html, показывающий исходный xml. При этом должна быть возможность скрытия\раскрытия блоков xml.Чем не устраивает стандартное отображение в IE?
...
Рейтинг: 0 / 0
20.12.2009, 17:42
    #36376471
krasovcheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева (xsl)
_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
20.12.2009, 18:12
    #36376496
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева (xsl)
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
20.12.2009, 22:27
    #36376722
krasovcheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева (xsl)
Спасибо, очень помогли ... как то я подзабыл про комменты и дата, надо будет доделать
...
Рейтинг: 0 / 0
20.12.2009, 22:43
    #36376741
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева (xsl)
А еще есть разные пространства имен

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


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