Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT преобразование XML (сноски в тексте как ссылки) / 13 сообщений из 13, страница 1 из 1
13.10.2012, 10:25
    #37996749
Vityalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
Исходный XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='1.xsl'?>
<text>
  <abzac>
    <zagolovok>Заголовок1</zagolovok>
    <article>Это текст <snoska> 1.Сноска о содержимом текста </snoska> Продолжение текста</article>
  </abzac>
  <abzac>
    <zagolovok>Заголовок2</zagolovok>
    <article>Это текст <snoska> 2.Сноска о содержимом текста </snoska> Продолжение текста</article>
  </abzac>
</text>



Таблица преобразования XSLT:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="text">
        <transform>
            <xsl:apply-templates/>
        </transform>
    </xsl:template>
    <xsl:template match="abzac">
            <xsl:value-of select="zagolovok"/>
            <xsl:value-of select="article"/>
    </xsl:template>
</xsl:stylesheet>



Результат:

Заголовок1
Это текст 1.Сноска о содержимом текста Продолжение текста
Заголовок2
Это текст 2.Сноска о содержимом текста Продолжение текста

Необходимый результат:
Заголовок1<br>
<p>Это текст <a href="#1">[1]</a> Продолжение текста</p>
Заголовок2<br>
<p>Это текст <a href="#2">[2]</a> Продолжение текста</p>
<p name="1">1.Сноска о содержимом текста</p>
<p name="2">2.Сноска о содержимом текста</p>

Подскажите, пожалуйста, в каком направлении искать или как хотябы просто вывести сноски отдельно, под документом:

Заголовок1
Это текст Продолжение текста
Заголовок2
Это текст Продолжение текста
1.Сноска о содержимом текста
2.Сноска о содержимом текста

пробовал по-разному, не получилось.
...
Рейтинг: 0 / 0
13.10.2012, 21:28
    #37997196
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
VityaloПодскажите, пожалуйста, в каком направлении искать или как хотябы просто вывести сноски отдельно, под документом:Описать шаблон для тега snoska
...
Рейтинг: 0 / 0
13.10.2012, 23:48
    #37997327
Vityalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
я описывал, но так как сноска в абзаце, она выводится вместе с ним, и так и не получилось вывести отдельно.
<абзац>Текст <сноска>Сноска</сноска> </абзац>

когда я вывожу абзац(хочу вывести только абзац, исключая дочерние элементы), сноска выводится тоже, то есть в результате: "Текст Сноска", вместо "Текст".

и не получается в конце вывести отдельно только сноски, если хочу вывести сноски, они выводятся только так: "Текст Сноска Сноска" то есть сначала вместе с "абзацем" а потом как сноски.
...
Рейтинг: 0 / 0
14.10.2012, 14:19
    #37997530
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:template match="article">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="snoska">
  ..............
</xsl:template>
...
Рейтинг: 0 / 0
14.10.2012, 21:30
    #37997780
Vityalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
ну если я вывожу article,

то у меня выводится и сноска(она внутри article),

а если я её ещё и отдельно выведу, то она будет выведена два раза
...
Рейтинг: 0 / 0
15.10.2012, 01:54
    #37997891
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
Vityaloну если я вывожу article,
то у меня выводится и сноска(она внутри article),
а если я её ещё и отдельно выведу, то она будет выведена два разаЯ же написал в предыдущем сообщении какие два шаблона нужно добавить
...
Рейтинг: 0 / 0
15.10.2012, 08:42
    #37997945
Vityalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
ничего не изменилось,
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
    <xsl:output method="html" indent="yes"/>
 
    <xsl:template match="text">
        <transform>
            <xsl:apply-templates/>
        </transform>
    </xsl:template>
 
    <xsl:template match="abzac">
            <xsl:value-of select="zagolovok"/>
            

            <xsl:value-of select="article"/>
            

    </xsl:template>
    
   <xsl:template match="article">
		<xsl:apply-templates/>
   </xsl:template>

	<xsl:template match="snoska">
	</xsl:template>

</xsl:stylesheet>



Результат:
Заголовок1
Это текст 1.Сноска о содержимом текста Продолжение текста
Заголовок2
Это текст 2.Сноска о содержимом текста Продолжение текста
...
Рейтинг: 0 / 0
15.10.2012, 11:40
    #37998210
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
Vityalo,

в артикле надо делать 2 прохода, я оба выделил модами, чтобы было понятно. можно обойтись одной модой, либо без мод но с фор-ичем, этот вриант с двумя модами самый быстрый для трансформера.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<xsl:template match="article">
    <xsl:template match="*" mode="article" />
    <xsl:template match="*" mode="snoska" />
</xsl:template>
<xsl:template match="*" mode="article">
    <xsl:copy>
        <xsl:copy-of select="@*" />
        <xsl:template match="*" mode="article" />
    </xsl:copy>
</xsl:template>
<xsl:template match="snoska" mode="article" priority="1" />
<xsl:template match="*" mode="snoska">
    <xsl:template match="*" mode="snoska" />
</xsl:template>
<xsl:template match="snoska" mode="snoska" priority="1">
    <xsl:value-of select="text()" />
</xsl:template>
...
Рейтинг: 0 / 0
15.10.2012, 11:48
    #37998223
Vityalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
я только начал изучать XSLT, посдений исходник не работает, пока не разобрался почему:

Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<xsl:output method="html" indent="yes"/>
  
<xsl:template match="article">
    <xsl:template match="*" mode="article" />
    <xsl:template match="*" mode="snoska" />
</xsl:template>

<xsl:template match="*" mode="article">
    <xsl:copy>
        <xsl:copy-of select="@*" />
        <xsl:template match="*" mode="article" />
    </xsl:copy>
</xsl:template>

<xsl:template match="snoska" mode="article" priority="1" />

<xsl:template match="*" mode="snoska">
    <xsl:template match="*" mode="snoska" />
</xsl:template>

<xsl:template match="snoska" mode="snoska" priority="1">
    <xsl:value-of select="text()" />
</xsl:template>

</xsl:stylesheet>



Error loading stylesheet: Parsing an XSLT stylesheet failed.
...
Рейтинг: 0 / 0
15.10.2012, 15:02
    #37998751
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
Vityalo,

ваш изначальный xsl надо было оставить.

А вообще, всегда обрабатывайте корневую ноду, избежите куче неприятностей и странных умолчаний.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">
        <xsl:apply-templates match="/text/abzac"/>
    </xsl:template>
 <!-- остальные темплейты 
match="abzac"
match="article"
match="*"
match="snoska"
и т.д.
-->
</xsl:stylesheet>
...
Рейтинг: 0 / 0
18.10.2012, 13:34
    #38004128
Vityalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
mage.lan,

попробовал и так и сяк, не работает выдаёт ошибку, киньте, пожалуйста, простенький пример(чтобы вывел article без snoska и сноски потом в конце отдельно), который преобразует без ошибок, а дальше я сам разберусь (как сделать нумерацию, гиперссылки и пр.)

примеры из темы(не работают):

Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:output method="html" indent="yes"/>
	<xsl:template match="text">
		<transform>
			<xsl:apply-templates/>
		</transform>
	</xsl:template>
	<xsl:template match="article">
		<xsl:template match="*" mode="article" />
		<xsl:template match="*" mode="snoska" />
	</xsl:template>
	<xsl:template match="*" mode="article">
		<xsl:copy>
			<xsl:copy-of select="@*" />
			<xsl:template match="*" mode="article" />
		</xsl:copy>
	</xsl:template>
	<xsl:template match="snoska" mode="article" priority="1" />
	<xsl:template match="*" mode="snoska">
		<xsl:template match="*" mode="snoska" />
	</xsl:template>
	<xsl:template match="snoska" mode="snoska" priority="1">
		<xsl:value-of select="text()" />
	</xsl:template>
</xsl:stylesheet>

Ошибка загрузки таблицы стилей: Ошибка разбора таблицы стилей XSLT.

Код: 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.
<?xml version="1.0" encoding="UTF-8"?>
	<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:output method="html" indent="yes"/>
	<xsl:template match="/">
		<xsl:apply-templates match="/text/abzac"/>
	</xsl:template>
	<xsl:template match="article">
		<xsl:template match="*" mode="article" />
		<xsl:template match="*" mode="snoska" />
	</xsl:template>
	<xsl:template match="*" mode="article">
		<xsl:copy>
			<xsl:copy-of select="@*" />
			<xsl:template match="*" mode="article" />
		</xsl:copy>
	</xsl:template>
	<xsl:template match="snoska" mode="article" priority="1" />
	<xsl:template match="*" mode="snoska">
		<xsl:template match="*" mode="snoska" />
	</xsl:template>
	<xsl:template match="snoska" mode="snoska" priority="1">
		<xsl:value-of select="text()" />
	</xsl:template>
</xsl:stylesheet>

Ошибка загрузки таблицы стилей: Ошибка разбора таблицы стилей XSLT.

постараюсь разобраться что такое mode
...
Рейтинг: 0 / 0
18.10.2012, 16:54
    #38004607
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
Vityalo,

Извиняюсь, торопился, наделал ошибок (((
Код: 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" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns="http://www.w3.org/1999/xhtml">
	<xsl:output method="html" indent="yes" />
	<xsl:template match="/text">
		<xsl:apply-templates />
	</xsl:template>
	<xsl:template match="abzac">
		<h1>
			<xsl:value-of select="zagolovok"/>
		</h1>
		<xsl:apply-templates select="article/node()" mode="article" />
		

		<xsl:apply-templates select="article/node()" mode="snoska" />
	</xsl:template>
	<xsl:template match="text()" mode="article">
		<xsl:value-of select="." />
	</xsl:template>
	<xsl:template match="*" mode="article">
		<xsl:apply-templates mode="article" />
	</xsl:template>
	<xsl:template match="snoska" mode="article" priority="1">
		<sup>
			<xsl:value-of select="substring-before(text(), '.')" />
		</sup>
	</xsl:template>
	<xsl:template match="text()" mode="snoska" />
	<xsl:template match="*" mode="snoska">
		<xsl:apply-templates mode="snoska" />
	</xsl:template>
	<xsl:template match="snoska" mode="snoska" priority="1">
		<small>
			<xsl:value-of select="text()" />
		</small>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
18.10.2012, 19:39
    #38004889
Vityalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT преобразование XML (сноски в тексте как ссылки)
mage.lan, большое спасибо!
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT преобразование XML (сноски в тексте как ссылки) / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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