powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT: Получить содержимое в шаблоне
6 сообщений из 6, страница 1 из 1
XSLT: Получить содержимое в шаблоне
    #38278486
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня такой фрагмент:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:template name="br">
	<xsl:param name="value" />
	<xsl:choose>
	<xsl:when test="contains($value,'&#xA;')">
		<xsl:value-of select="substring-before($value,'&#xA;')" /><br/>&#xA;
		<xsl:call-template name="br"><xsl:with-param name="value" select="substring-after($value,'&#xA;')" /></xsl:call-template>
	</xsl:when>
	<xsl:otherwise>
		<xsl:value-of select="$value" />
	</xsl:otherwise>
	</xsl:choose>
</xsl:template>



И используется он примерно так:
Код: xml
1.
<xsl:call-template name="br"><xsl:with-param name="value" select="normalize-space(text())"/></xsl:call-template>



Два вопроса.

1. Можно ли обойтись без параметра $value? То есть можно ли внутри шаблона получить данные из того места, откуда этот шаблон был вызван. Другими словами, чтобы можно было написать <xsl:call-template name="br"><xsl:value-of select="text()"/></xsl:call-template>.

2. Я использую функцию normalize-space, чтобы убрать хвостовые переводы строки. Можно ли эту функцию перенести в шаблон?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
XSLT: Получить содержимое в шаблоне
    #38278522
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй вопрос решил так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:template name="br">
	<xsl:param name="value" />
	<xsl:choose>
	<xsl:when test="contains($value,'&#xA;')">
		<xsl:if test="not(starts-with($value,'&#xA;'))"><xsl:value-of select="substring-before($value,'&#xA;')" /><br/>&#xA;</xsl:if>
		<xsl:call-template name="br"><xsl:with-param name="value" select="substring-after($value,'&#xA;')" /></xsl:call-template>
	</xsl:when>
	<xsl:otherwise>
		<xsl:value-of select="$value" />
	</xsl:otherwise>
	</xsl:choose>
</xsl:template>



Первый пока актуален.
...
Рейтинг: 0 / 0
XSLT: Получить содержимое в шаблоне
    #38278544
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.2. Я использую функцию normalize-space, чтобы убрать хвостовые переводы строки. Можно ли эту функцию перенести в шаблон?Может лучше решить вопрос глобально?
Код: xml
1.
<xsl:output indent="no"/>


1. Не понял. Что значит "откуда этот шаблон был вызван"? Шаблон работает с xml-документом, а не самим собой. Если имеется ввиду текущий контекст документа, то . (точка) или current().
...
Рейтинг: 0 / 0
XSLT: Получить содержимое в шаблоне
    #38278591
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, глобально не нужно, это нужно только для отдельных фрагментов.

1. То есть я могу написать так?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:template name="br">
	<xsl:choose>
	<xsl:when test="contains(current(),'&#xA;')">
		<xsl:if test="not(starts-with(current(),'&#xA;'))"><xsl:value-of select="substring-before(current(),'&#xA;')" /><br/>&#xA;</xsl:if>
		<xsl:call-template name="br"><xsl:value-of select="substring-after(current(),'&#xA;')" /></xsl:call-template>
	</xsl:when>
	<xsl:otherwise>
		<xsl:value-of select="current()" />
	</xsl:otherwise>
	</xsl:choose>
</xsl:template>
...
Рейтинг: 0 / 0
XSLT: Получить содержимое в шаблоне
    #38278675
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
current() это ссылка на ноду, поэтому лучше
Код: xml
1.
<xsl:when test="contains(current()/text(),'&#xA;')">
...
Рейтинг: 0 / 0
XSLT: Получить содержимое в шаблоне
    #38278679
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вместо всех эти substring можно использовать translate, правда перенос придется заменять чем-нибудь не пустым, например пробелом.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT: Получить содержимое в шаблоне
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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