Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT: Получить содержимое в шаблоне / 6 сообщений из 6, страница 1 из 1
29.05.2013, 14:22
    #38278486
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT: Получить содержимое в шаблоне
Есть у меня такой фрагмент:
Код: 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
29.05.2013, 14:33
    #38278522
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT: Получить содержимое в шаблоне
Второй вопрос решил так:
Код: 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
29.05.2013, 14:41
    #38278544
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT: Получить содержимое в шаблоне
Alibek B.2. Я использую функцию normalize-space, чтобы убрать хвостовые переводы строки. Можно ли эту функцию перенести в шаблон?Может лучше решить вопрос глобально?
Код: xml
1.
<xsl:output indent="no"/>


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

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
29.05.2013, 15:39
    #38278675
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT: Получить содержимое в шаблоне
current() это ссылка на ноду, поэтому лучше
Код: xml
1.
<xsl:when test="contains(current()/text(),'&#xA;')">
...
Рейтинг: 0 / 0
29.05.2013, 15:40
    #38278679
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT: Получить содержимое в шаблоне
А вместо всех эти substring можно использовать translate, правда перенос придется заменять чем-нибудь не пустым, например пробелом.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT: Получить содержимое в шаблоне / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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