Передача XSLT для каждого результата в другой шаблон - PullRequest
0 голосов
/ 28 декабря 2018

Я хотел бы передать для каждого цикла в качестве параметра в другой шаблон

<xsl:template name="dataTableGroup">
        <xsl:call-template name="test">
            <xsl:with-param name="pContent1">
                    <xsl:for-each
                        select="NewDataSet/Table[generate-id() = generate-id(key('countryKey', concat(Unit, ReportingBusUnitDesc)))]">

                        <tr>
                            <td class="columnTextRight">
                                <xsl:value-of select="ReportingBusUnitDesc"/>
                            </td>
                        </tr>
                    </xsl:for-each>                
            </xsl:with-param>
        </xsl:call-template>


    </xsl:template>

и использовать его здесь

<xsl:template name="test">
    <xsl:param name="pContent1"/>
    <xsl:for-each select="$pContent1">

    </xsl:for-each>   
</xsl:template>

, но вместо узлов я получаю только значения.В идеале я хотел бы, чтобы это работало с xslt 1.0.

1 Ответ

0 голосов
/ 28 декабря 2018

Если вы используете процессор XSLT 1.0, тогда значение параметра является фрагментом результирующего дерева, поэтому вам необходимо использовать функцию расширения, специфичную для процессора, например exsl:node-set (http://exslt.org/exsl/functions/node-set/index.html), сначала преобразовать его в набор узлов, например

<xsl:template name="test">
    <xsl:param name="pContent1"/>
    <xsl:for-each select="exsl:node-set($pContent1)/tr" xmlns:exsl="http://exslt.org/common">

    </xsl:for-each>   
</xsl:template>

Узел, который делает копию фрагмента результирующего дерева, возможен без использования какого-либо расширения, например, <xsl:copy-of select="$pContent1"/> должен делать.

Также для полноты примера я объявил пространство имен дляфункция расширения для элемента xsl:for-each, обычно вы помещаете его в корневой элемент таблицы стилей xsl:stylesheet/transform и дополнительно используете exclude-result-prefixes="exsl", чтобы гарантировать, что пространство имен не встречается ни в одном элементе результата.

При использованииXSLT 2 или 3 процессор, у вас не должно быть никаких проблем, чтобы использовать переменную непосредственно как узел фрагмента, содержащий ваши элементы tr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...