Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / текст в CDATA как узлы выходного файла / 9 сообщений из 9, страница 1 из 1
19.04.2015, 14:46
    #38940082
sa4iko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
Господа, просьба разъяснить.
Требуется создавать многоуровневый список из перечня узлов (уровень в зависимости от атрибутов).
На входе XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0"?>
<?xml-stylesheet href="listProcess.xsl" type="text/xsl"?>
<!DOCTYPE main []>
<main>
	<node s1="1" s2="1" s3="1"/>
	<node s1="1" s2="2" s3="1"/>
	<node s1="1" s2="2" s3="2"/>
	<node s1="1" s2="2" s3="3"/>
	<node s1="1" s2="3" s3="1"/>
	<node s1="2" s2="1" s3="1"/>
	<node s1="2" s2="1" s3="2"/>
</main>


listProcess.xsl
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" encoding="UTF-8"/>

	<xsl:template match="/">
		<html>
			<head/>
			<body>
				<ul>
					<xsl:apply-templates/>
				</ul>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="node">
	<xsl:text disable-output-escaping="yes"><![CDATA[<li>]]></xsl:text>
		<xsl:value-of select="@s1"/>
		<xsl:value-of select="@s2"/>
		<xsl:value-of select="@s3"/>
	<xsl:text disable-output-escaping="yes"><![CDATA[</li>]]></xsl:text>
	</xsl:template>
</xsl:stylesheet>



В IE XML отображается списком. В FF "написанный" <li> остается текстовым узлом. Как сделать <li> узлом для FF?
...
Рейтинг: 0 / 0
19.04.2015, 16:30
    #38940116
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
Приведите пример XML, который хочется получить?
Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:template match="node">
	<li>
		<xsl:value-of select="@s1"/>
		<xsl:value-of select="@s2"/>
		<xsl:value-of select="@s3"/>
	</li>
</xsl:template>

Так?
...
Рейтинг: 0 / 0
19.04.2015, 17:23
    #38940136
sa4iko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
В данном примере получить хочу
Код: xml
1.
2.
3.
4.
5.
6.
<ul>
  <li>111</li>
  <li>121</li>
  ...
  <li>212</li>
<ul>


Структура не важна - проблема в отображении в FF
...
Рейтинг: 0 / 0
19.04.2015, 17:47
    #38940146
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
sa4ikoВ данном примере получить хочу 17536040
...
Рейтинг: 0 / 0
19.04.2015, 21:46
    #38940202
sa4iko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
Мне требуется CDATA. В реальной задаче строю многоуровневое дерево.
Для каждого node в зависимости от предыдущего открывается/закрывается <ul><li>

IE воспринимает написанное в CDATA как узлы, FF видит текст.
xml тот же,
xsl:
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" encoding="UTF-8"/>

	<xsl:template match="/">
		<html>
			<head/>
			<body>
				<ul>
					<xsl:apply-templates/>
				</ul>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="node">
		<xsl:if test="not(preceding-sibling::*[1]/@s1 = @s1)">
			<xsl:if test="position() != 1">
				<xsl:text disable-output-escaping="yes"><![CDATA[</ul></li></ul></li>]]></xsl:text>
			</xsl:if>
			<xsl:text disable-output-escaping="yes"><![CDATA[<li>level s1=]]></xsl:text>
			<xsl:value-of select="@s1"/>
			<xsl:text disable-output-escaping="yes"><![CDATA[<ul>]]></xsl:text>
		</xsl:if>
		<xsl:if test="not(preceding-sibling::*[1]/@s2 = @s2)">
			<xsl:if test="preceding-sibling::*[1]/@s1 = @s1">
				<xsl:text disable-output-escaping="yes"><![CDATA[</ul></li>]]></xsl:text>
			</xsl:if>
			<xsl:text disable-output-escaping="yes"><![CDATA[<li>level s2=]]></xsl:text>
			<xsl:value-of select="@s2"/>
			<xsl:text disable-output-escaping="yes"><![CDATA[<ul>]]></xsl:text>
		</xsl:if>
		<li>
			<xsl:value-of select="concat('node ',@s1,@s2,@s3)"/>
		</li>
		<xsl:if test="position() = last()">
			<xsl:text disable-output-escaping="yes"><![CDATA[</ul></li></ul></li>]]></xsl:text>
		</xsl:if>
	</xsl:template>
</xsl:stylesheet>



Требуется получить:
Код: 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.
<ul>
	<li>level s1=1
		<ul>
			<li>level s2=1
				<ul>
					<li>node 111</li>
				</ul>
			</li>
			<li>level s2=2
				<ul>
					<li>node 121</li>
					<li>node 122</li>
					<li>node 123</li>
				</ul>
			</li>
			<li>level s2=3
				<ul>
					<li>node 131</li>
				</ul>
			</li>
		</ul>
	</li>
	<li>level s1=2
		<ul>
			<li>level s2=1
				<ul>
					<li>node 211</li>
					<li>node 212</li>
				</ul>
			</li>
		</ul>
	</li>
</ul>
...
Рейтинг: 0 / 0
20.04.2015, 00:47
    #38940235
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
Код: xml
1.
<xsl:text disable-output-escaping="yes">&lt;li&gt;</xsl:text>


Да, и глобальный совет - откажитесь от XSL преобразования на клиенте. Делайте все на сервере. А клиенту отдавайте готовый html. Поверьте, количество проблем сократится в разы
...
Рейтинг: 0 / 0
20.04.2015, 22:11
    #38941100
sa4iko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
Нет, FF по-прежнему выводит:

Код: plaintext
1.
</ul></li></ul></li><li>level s1=1<ul><li>level s2=1<ul>
node 111
</ul></li><li>level s2=2<ul>

node 121

node 122

node 123
</ul></li><li>level s2=3<ul>

node 131
</ul></li></ul></li><li>level s1=2<ul><li>level s2=1<ul>

node 211

node 212
То есть он печатает список только у "явно" созданных <li>
...
Рейтинг: 0 / 0
21.04.2015, 00:14
    #38941159
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
sa4ikoНет, FF по-прежнему выводит:_Vasilisk_Да, и глобальный совет - откажитесь от XSL преобразования на клиенте. Делайте все на сервере. А клиенту отдавайте готовый html. Поверьте, количество проблем сократится в разы
...
Рейтинг: 0 / 0
21.04.2015, 00:50
    #38941171
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
текст в CDATA как узлы выходного файла
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="UTF-8"/>

  <xsl:template match="/">
    <html>
      <head/>
      <body>
        <ul>
          <xsl:apply-templates/>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="node">
    <xsl:if test="not(preceding-sibling::*[1]/@s1 = @s1)">
      <ul>
        <li>
          level s1=
          <xsl:value-of select="@s1"/>
          <ul>
            <xsl:apply-templates select="../node[@s1 = current()/@s1]" mode="level1"/>
          </ul>
        </li>
      </ul>
    </xsl:if>
  </xsl:template>

  <xsl:template match="node" mode="level1">
    <xsl:if test="not(preceding-sibling::*[1]/@s2 = @s2)">
      <li>
        level s2=
        <xsl:value-of select="@s2"/>
        <ul>
          <xsl:apply-templates select="../node[@s2 = current()/@s2 and @s1 = current()/@s1]" mode="level2"/>
        </ul>
      </li>
    </xsl:if>
  </xsl:template>

  <xsl:template match="node" mode="level2">
    <li>
      <xsl:value-of select="concat('node ',@s1,@s2,@s3)"/>
    </li>
  </xsl:template>

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


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