Мне нужно динамически создать пронумерованный XML с использованием XSL с максимальным значением - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно динамически создавать XML, как показано ниже, используя XSL.Я хотел бы передать либо последний атрибут num, либо значение последнего цикла процессору XSL. Кто-нибудь знает, как это сделать? Желаемый вывод, подобный следующему:

<loops>
<loop num="1">0</loop>
<loop num="2">1001</loop>
<loop num="3">2001</loop>
<loop num="4">3001</loop>
<loop num="5">4001</loop>
<loop num="6">5001</loop>
<loop num="7">6001</loop>
</loops>

1 Ответ

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

Если ваш процессор поддерживает XSLT 2.0 , тогда это может быть очень просто:

<xsl:template match="/">
    <loops>
        <xsl:for-each select="1 to input">
            <loop num="{.}">
                <xsl:value-of select="(. - 1) * 1000 + 1" />
            </loop>
        </xsl:for-each>
    </loops>
</xsl:template>

Обратите внимание, что результат будет немного отличаться от вашего:

<?xml version="1.0" encoding="utf-8"?>
<loops>
   <loop num="1">1</loop>
   <loop num="2">1001</loop>
   <loop num="3">2001</loop>
   <loop num="4">3001</loop>
   <loop num="5">4001</loop>
   <loop num="6">5001</loop>
   <loop num="7">6001</loop>
</loops>

Демоверсия : http://xsltransform.hikmatu.com/bdxtpG


То же самое в XSLT 1.0 :

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
    <loops>
        <xsl:call-template name="create-loops">
            <xsl:with-param name="n" select="input"/>
        </xsl:call-template>
    </loops>
</xsl:template>

<xsl:template name="create-loops">
    <xsl:param name="n"/>
    <xsl:if test="$n > 0">
        <xsl:call-template name="create-loops">
            <xsl:with-param name="n" select="$n - 1"/>
        </xsl:call-template>
        <loop num="{$n}">
            <xsl:value-of select="($n - 1) * 1000 + 1" />
        </loop>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

Демо : http://xsltransform.hikmatu.com/3NzcBsJ

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