powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT преобразование XML (сноски в тексте как ссылки)
13 сообщений из 13, страница 1 из 1
XSLT преобразование XML (сноски в тексте как ссылки)
    #37996749
Vityalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исходный 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
XSLT преобразование XML (сноски в тексте как ссылки)
    #37997196
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VityaloПодскажите, пожалуйста, в каком направлении искать или как хотябы просто вывести сноски отдельно, под документом:Описать шаблон для тега snoska
...
Рейтинг: 0 / 0
XSLT преобразование XML (сноски в тексте как ссылки)
    #37997327
Vityalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я описывал, но так как сноска в абзаце, она выводится вместе с ним, и так и не получилось вывести отдельно.
<абзац>Текст <сноска>Сноска</сноска> </абзац>

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

и не получается в конце вывести отдельно только сноски, если хочу вывести сноски, они выводятся только так: "Текст Сноска Сноска" то есть сначала вместе с "абзацем" а потом как сноски.
...
Рейтинг: 0 / 0
XSLT преобразование XML (сноски в тексте как ссылки)
    #37997530
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
XSLT преобразование XML (сноски в тексте как ссылки)
    #37997780
Vityalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну если я вывожу article,

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

а если я её ещё и отдельно выведу, то она будет выведена два раза
...
Рейтинг: 0 / 0
XSLT преобразование XML (сноски в тексте как ссылки)
    #37997891
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vityaloну если я вывожу article,
то у меня выводится и сноска(она внутри article),
а если я её ещё и отдельно выведу, то она будет выведена два разаЯ же написал в предыдущем сообщении какие два шаблона нужно добавить
...
Рейтинг: 0 / 0
XSLT преобразование XML (сноски в тексте как ссылки)
    #37997945
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.
<?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
XSLT преобразование XML (сноски в тексте как ссылки)
    #37998210
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
XSLT преобразование XML (сноски в тексте как ссылки)
    #37998223
Vityalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я только начал изучать 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
XSLT преобразование XML (сноски в тексте как ссылки)
    #37998751
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
XSLT преобразование XML (сноски в тексте как ссылки)
    #38004128
Vityalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
XSLT преобразование XML (сноски в тексте как ссылки)
    #38004607
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
XSLT преобразование XML (сноски в тексте как ссылки)
    #38004889
Vityalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan, большое спасибо!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT преобразование XML (сноски в тексте как ссылки)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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