2012-06-28 2 views
0

У меня есть цикл, как это в качестве шаблона:xslt Как генерировать последовательность нетипизированного атома?

<xsl:variable name="seq"> 
     <xsl:sequence select="1"/> 
     <xsl:sequence select="2"/> 
     <xsl:sequence select="3"/> 
     <xsl:sequence select="4"/> 
     <xsl:sequence select="5"/> 
    </xsl:variable> 

    <xsl:for-each select="$seq"> 
     <xsl:text>(</xsl:text> 
     <xsl:value-of select="."/> 
     <xsl:text>)</xsl:text> 
    </xsl:for-each> 

Хочу итерацию один раз по каждому элементу $ SEQ, производя: (1) (2) (3) (4) (5)

Вместо этого кода производит (1 2 3 4 5)

Как я могу создать правильную последовательность?

Спасибо!

ответ

0

Ну

<xsl:variable name="seq" select="1,2,3,4,5"/> 

<xsl:value-of select="for $i in $seq return concat('(', $i, ')')" separator=" "/> 

должен делать. Или чего вы хотите достичь? Для вашего подхода

<xsl:variable name="seq" as="item()*"> 
     <xsl:sequence select="1"/> 
     <xsl:sequence select="2"/> 
     <xsl:sequence select="3"/> 
     <xsl:sequence select="4"/> 
     <xsl:sequence select="5"/> 
    </xsl:variable> 

может улучшить ситуацию, но выглядит довольно сложным, если все, что вам нужно, это последовательность.

0

Переменная с Содержится инструкциями и не в качестве атрибута, как это:

<xsl:variable name="seq"> 
    <xsl:sequence select="1"/> 
    <xsl:sequence select="2"/> 
    <xsl:sequence select="3"/> 
    <xsl:sequence select="4"/> 
    <xsl:sequence select="5"/> 
</xsl:variable> 

представляет собой узел документа, в этом случае узел документа, содержащий единый текстовый узел, содержимое которого является строка «1 2 3 4 5 ». Если вам нужна последовательность из пяти целых чисел, используйте либо атрибут select, либо напишите

<xsl:variable name="seq" as="xs:integer*"> 
    <xsl:sequence select="1"/> 
    <xsl:sequence select="2"/> 
    <xsl:sequence select="3"/> 
    <xsl:sequence select="4"/> 
    <xsl:sequence select="5"/> 
</xsl:variable> 
Смежные вопросы