XSLT начинается не с «E» или «Z»

Я очень новичок в XSLT. Я пытаюсь создать собственное представление списка в SharePoint 2010.

В зависимости от того, что пользователь хочет видеть, будет зависеть, какие элементы будут возвращены. Если говорят, что они хотят видеть вид 1: он получит все ссылки, которые начинаются с E. Если вид 2: все ссылки начинаются с Z. Если вид 3: все ссылки начинаются с каждой второй буквы.

У меня есть следующий код:

    <xsl:variable name="dvt_StyleName">Table</xsl:variable>
    <xsl:variable name="RowLimit" select="30" />
    <xsl:variable name="query_string" select="substring-after($current_url,'sheet=')"/>
    <xsl:variable name="query_sheet" select="substring-before($query_string,'&amp;acYear=')"/>
    <xsl:variable name="query_year" select="substring-after($query_string,'acYear=')"/>
    <!--sheet query assignment-->
    <xsl:variable name="qOptions">
        <xsl:choose>
            <xsl:when test="$query_sheet = '2'">E</xsl:when>
            <xsl:when test="$query_sheet = '3'">Z</xsl:when>
            <xsl:otherwise>A|B|C|D|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y</xsl:otherwise>                              
        </xsl:choose>
    </xsl:variable>
<!--debugging--->
    <xsl:value-of select="$qOptions"/>
<!-- end of debugging--->
    <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row[starts-with(@Title, $qOptions)]"/>

В противном случае оператор в настоящее время не работает, потому что я пытаюсь получить несколько условий в операторе start-with. Я знаю, что делаю это очень неправильно, поэтому любая помощь будет принята с благодарностью. Если бы вы могли попытаться быть немного более терпеливым со мной, это было бы здорово, потому что синтаксис этого языка действительно меня смущает!

заранее спасибо


person UncountedBrute    schedule 07.10.2017    source источник


Ответы (1)


Поскольку вы имеете дело с отдельными буквами, вы можете определить свое «иначе» следующим образом...

<xsl:otherwise>ABCDFGHIJKLMNOPQRSTUVWXY</xsl:otherwise>

Тогда ваша переменная Rows может быть переписана так

<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row[contains($qOptions, substring(@Title, 1, 1))]"/>

т.е. Содержит ли переменная $qOptions первую букву атрибута Title

РЕДАКТИРОВАТЬ: Если вы хотите сопоставить «все остальное», а не «каждую другую букву», подумайте о том, чтобы переписать его на этот, немного более длинный способ....

<xsl:variable name="qOptions">
    <xsl:choose>
        <xsl:when test="$query_sheet = '2'">E</xsl:when>
        <xsl:when test="$query_sheet = '3'">Z</xsl:when>
        <xsl:otherwise>!EZ</xsl:otherwise>                              
    </xsl:choose>
</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row[(not(starts-with($qOptions, '!')) and contains($qOptions, substring(@Title, 1, 1))) or (starts-with($qOptions, '!') and not(contains($qOptions, substring(@Title, 1, 1))))]"/>
person Tim C    schedule 07.10.2017
comment
qOptions содержит букву для поиска. либо E, Z или все остальное. - person UncountedBrute; 07.10.2017
comment
Это работает абсолютно удовольствие! никогда даже не думал писать наоборот! - person UncountedBrute; 07.10.2017