Цикл и объединить массив в xslt - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь зациклить массив и объединить ненулевые значения в одну переменную. Излишне говорить, что я новичок в XSLT. Пожалуйста, посмотрите код, который я написал, и дайте мне знать лучший способ сделать это.

\ должен быть добавлен в конце, а также я должен добавить разделитель * между значениями. Если * и \ собираются вместе, тогда должен прийти только \, и мы можем опустить *. Я считаю, что логика верна. Синтаксис является проблемой.

Спасибо, Anoop

<xsl:variable name="secondsegmentarray">
    <item>Data/Attribute1</item>
    <item>Data/Attribute2</item>
    <item>Data/Attribute3</item>
    <item>Data/Attribute4</item>
    <item>Data/Attribute5</item>
    <item>Data/Attribute6</item>
    <item>Data/Attribute7</item>
</xsl:variable>
<xsl:variable name="secondsegment">
    <xsl:value-of select="'\'">
    <xsl:for-each select="secondsegmentarray/item">
        <xsl:choose>
         <xsl:when test="$secondsegmentarray.item = '' and secondsegment='\'"/>
         </xsl:when>
         <xsl:when test="$secondsegmentarray.item = not('') and secondsegment='\'"/>
           <xsl:value-of select="concat($secondsegmentarray.item,secondsegment)"/>
         </xsl:when>
         <xsl:when test="$secondsegmentarray.item = not('') and secondsegment!='\'"/>
           <xsl:value-of select="concat($secondsegmentarray.item,'*',secondsegment)"/>
         </xsl:when>
         <xsl:when test="$secondsegmentarray.item = '' and secondsegment!='\'"/>
           <xsl:value-of select="concat('*',secondsegment)"/>
         </xsl:when>
        </xsl:choose>
    </xsl:for-each>
<xsl:variable/>

1 Ответ

1 голос
/ 26 апреля 2019

Не совсем ответ, но слишком длинный, чтобы уместиться в комментарии.У вас есть многочисленные проблемы с синтаксисом, начиная с:

<xsl:for-each select="secondsegmentarray/item">

, что означает:

  • отсутствует символ $ для идентификации переменной и:
  • пытаетсяобработать фрагмент дерева результатов , не преобразовывая его сначала в набор узлов .

Правильный синтаксис:

<xsl:for-each select="exsl:node-set($secondsegmentarray)/item">

после объявления:

xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"

в заголовке.

Далее, внутри инструкции xsl:for-each вы находитесь в контексте item.Это означает, что любые тесты, связанные с текущим item, должны ссылаться на текущий узел, например:

 <xsl:when test=". = ''">

Ваша попытка использования $secondsegmentarray.item не имеет смысла в XPath / XSLT.

Кроме того, вы ссылаетесь на переменную secondsegment (опять же, без обязательного префикса $) в определении самой переменной.Это, конечно, не может работать.

Может быть и больше, но они выделяются.

...