XSLT不能使用xsl:attribute设置href属性

时间:2018-10-29 09:31:13

标签: xml xslt

我遇到了一个奇怪的问题,我也只是开始着手XSLT项目。我定义了一个名为collapeId的变量,该变量成功获取了值11。然后,我使用该变量尝试设置属性href,<a>元素中的data-target和id中的<div>元件。我遇到的问题是我在href属性的输出中得到href="%0A%09%09%09%09#11",但其他属性设置得很好。

有什么想法为什么相同的代码在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 :(得分:1)

您正在像这样创建属性

<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"/>
相关问题