#xslt
#xslt
Вопрос:
У меня есть следующий шаблон XSLT:
<xsl:template name="foo">
<xsl:param name="arg1">0</xsl:param>
<xsl:param name="arg2" />
<xsl:param name="arg3" />
<xsl:call-template name="bar">
<xsl:with-param name="arg1"><xsl:value-of select="$arg1" /></xsl:with-param>
<xsl:with-param name="arg2"><xsl:copy-of select="$arg2" /></xsl:with-param>
<xsl:with-param name="arg3"><!-- what do I put here? --></xsl:with-param>
</xsl:call-template>
</xsl:template>
Теперь arg3 — это фрагмент xml. Я только хочу выбрать элемент в arg3 для передачи в bar как arg3. Как мне выбрать отдельные узлы из параметра? Я пытался, но это не сработало.
Пожалуйста, не предлагайте отправлять значение arg3/qux вместо arg3. Для этого есть веская причина, но это выходит за рамки данного вопроса.
Комментарии:
1. Можете ли вы уточнить, но это не сработало ? Выдавались ли какие-либо сообщения об ошибках? Отредактированное решение Джеймса Джонсона, скорее всего, будет тем, что вам нужно, но без каких-либо сообщений об ошибках трудно оказать помощь.
Ответ №1:
Это зависит от того, как выглядит фрагмент XML, но вы можете сделать что-то вроде этого:
<xsl:value-of select="$arg3/first_name" />
Редактировать
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext msxsl">
<xsl:template match="/">
<xsl:value-of select="ext:node-set($arg3)/first_name" />
</xsl:template>
</xsl:stylesheet>
Комментарии:
1. Что вы используете для обработки вашего XSLT? Java, похоже, это не нравится. 🙁
2.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3. Здесь я немного углубляюсь, но попробуйте использовать набор узлов.
4. Сейчас я собираюсь сыграть в лотерею 😉
Ответ №2:
Просто рассматривайте $arg3 как узел, работает для меня.
<xsl:call-template name="bar">
<xsl:with-param name="arg1"><xsl:value-of select="$arg1" /></xsl:with-param>
<xsl:with-param name="arg2"><xsl:copy-of select="$arg2" /></xsl:with-param>
<xsl:with-param name="arg3" select="$arg3/sub-node"/>
</xsl:call-template>