XSL, где заявление

Я ищу помощь с селектором XSL:

Мне нужен селектор, который будет отображать Название другого списка, где Документ той же строки соответствует полю Имя. Если записи нет, я покажу ссылку для создания новой. Вот что у меня есть:

<xsl:choose>
    <xsl:when test="/dsQueryResponse
                       /Change_Types
                          /Rows
                             /Row
                                /@Document = @Name"/>
        <xsl:value-of select="/dsQueryResponse
                                 /Change_Types
                                    /Rows
                                        /Row
                                           /@Document[
                                              /dsQueryResponse
                                                 /Change_Types
                                                    /Rows
                                                       /Row
                                                          /@Document = @Name
                                           ]"/>
    </xsl:when>
    <xsl:otherwise>
        <!-- Code to show link -->
    </xsl:otherwise>
</xsl:choose>

Если бы кто-нибудь мог указать, где я ошибаюсь, это было бы очень признательно!


person Jesse Roper    schedule 25.03.2011    source источник
comment
Этот предикат всегда будет ложным, потому что атрибут @Document никогда не будет иметь атрибут @Name. Пожалуйста, опубликуйте свой XML-документ.   -  person    schedule 26.03.2011


Ответы (2)


При отсутствии вашего исходного XML это полная догадка, но я подозреваю, что

@Document = @Name

должно быть

@Document = current()/@Name

в обоих случаях. Если вы действительно не хотите, чтобы атрибуты Document и Name одного и того же элемента имели одинаковое значение.

person Michael Kay    schedule 25.03.2011

Вот как я это сделал: нужно было создать переменную для @FileLeafRef, чтобы ее можно было сохранить для проверки внутри for-each.

<xsl:variable name="document" select="@FileLeafRef"/>

<xsl:choose>
<!-- If there is an entry in the 'Tickets' list for this @FileLeafRef -->
<xsl:when test="/dsQueryResponse/Tickets/Rows/Row/@Document = $document">
    <!-- Show it here -->
    <xsl:for-each select="/dsQueryResponse/Tickets/Rows/Row">
        <xsl:if test="@Document = $document">
        <xsl:value-of select="@Title"/>
    </xsl:if>
        </xsl:for-each>
</xsl:when>
<!-- Else, show a link to add a new Ticket with the document auto-populated -->
<xsl:otherwise>
    <xsl:call-template name="addNewItemLink">
        <xsl:with-param name="list" select="'Tickets'"/>
        <xsl:with-param name="document" select="@FileLeafRef"/>
    </xsl:call-template>
</xsl:otherwise>
</xsl:choose>
person Jesse Roper    schedule 28.03.2011