XSLT не может использовать xsl: attribute для установки атрибута href - PullRequest
0 голосов
/ 29 октября 2018

У меня странная проблема, и я только начинаю изучать XSLT для проекта. Я определил переменную с именем collapeId, которая успешно получает значение 11. Затем я использую эту переменную, чтобы попытаться установить атрибуты href, data-target в элементе <a> и id в элементе <div>. У меня проблема в том, что я получаю href="%0A%09%09%09%09#11" в своем выводе для атрибута href, но он отлично устанавливает другие атрибуты.

Есть идеи, почему один и тот же код ведет себя по-разному с href и как я могу это исправить?

Учитывая следующее XSLT, которое я написал.

<!-- Retrieve value of pardef attribute -->
<xsl:variable name="collapseId">
    <xsl:value-of select="sectiontitle/@pardef"/>
</xsl:variable>

<!--<a class="collapsed collapsible list-group-item" style="border-width: 0px 0px 1px; border-bottom-style: solid; border-bottom-color: #dddddd; margin-bottom: 0px; color: #646464 !important;" href="#a3" rel="nofollow" data-target="#a3" data-toggle="collapse"> --> 
<a class="collapsed collapsible list-group-item" style="border-width: 0px 0px 1px; border-bottom-style: solid; border-bottom-color: #dddddd; margin-bottom: 0px; color: #646464 !important;" rel="nofollow" data-toggle="collapse"> 
    <xsl:attribute name="data-target">
        #<xsl:value-of select="$collapseId"/>
    </xsl:attribute>    
    <xsl:attribute name="href">
        #<xsl:value-of select="$collapseId" />
    </xsl:attribute>    

    <xsl:value-of select="sectiontitle"/>
</a>

<div class="collapse" style="margin: 10px 20px;">
    <xsl:attribute name="id">
        #<xsl:value-of select="$collapseId"/>
    </xsl:attribute>
    <xsl:apply-templates select="par" />
</div>

Я получаю следующий вывод.

<a class="collapsed collapsible list-group-item" style="border-width: 0px 0px 1px; border-bottom-style: solid; border-bottom-color: #dddddd; margin-bottom: 0px; color: #646464 !important;" rel="nofollow" data-toggle="collapse" data-target="
            #11" href="%0A%09%09%09%09#11">Anchor Title</a>
                            <div class="collapse" style="margin: 10px 20px;" id="
            #11">
                                <p>Data 1</p>
                                <p/>
                                <p>Data 2  </p>
                                <p/>
                                <p>Data 3</p>
                            </div>

Спасибо всем!

1 Ответ

0 голосов
/ 29 октября 2018

Вы создаете атрибут вот так

<xsl:attribute name="href">
    #<xsl:value-of select="$collapseId" />
</xsl:attribute>  

Но вы отступили текстовый узел, содержащий #. Это означает, что это не просто добавление # к атрибуту, но новая строка и пробелы перед ним.

Измените это на

<xsl:attribute name="href">
    <xsl:text>#</xsl:text>
    <xsl:value-of select="$collapseId" />
</xsl:attribute>  

Разница в том, что XSLT будет игнорировать текстовые узлы "только пробелы", поэтому в этом случае символ новой строки и пробелы не будут выводиться.

Обратите внимание: если бы вы могли использовать XSLT 2.0, вы могли бы сделать это

<xsl:attribute name="href" select="concat('#', $collapseId)" />

Также обратите внимание, что было бы более эффективно объявить переменную collapseId следующим образом:

<xsl:variable name="collapseId" select="sectiontitle/@pardef"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...