Как мне выбрать элемент в параметре шаблона XSLT?

#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>