删除xsl中的空格

时间:2011-06-13 23:55:10

标签: xslt whitespace

如何摆脱破坏链接的“位置”元素后添加的空间? IE:“/ location toxxx.aspx” XML

- <Root>
 <Schema>
 <Field Type="Text" DisplayName="Location" Required="FALSE" MaxLength="255"  Name="Location" /> 
 <Field Type="Currency" DisplayName="Price one way-saloon" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_one_x0020_way" /> 
 <Field Type="Currency" DisplayName="Price return-saloon" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_return" /> 
 <Field ReadOnly="TRUE" Type="Computed" Name="LinkTitle" DisplayName="Location id" /> 
 <Field Type="Currency" DisplayName="Price one way-estate" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_one_x0020_way_x002d_" /> 
 <Field Type="Currency" DisplayName="Price return-estate" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_return_x002d_estate" /> 
 <Field Type="Currency" DisplayName="Price one way-MPV" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_one_x0020_way_x002d_0" /> 
 <Field Type="Currency" DisplayName="Price return-MPV" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_return_x002d_MPV" /> 
 <Field Type="Currency" DisplayName="Price one way-MPV+" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_one_x0020_way_x002d_1" /> 
 <Field Type="Currency" DisplayName="Price return-MPV+" Required="FALSE" Decimals="0" LCID="2057" Name="Price_x0020_return_x002d_MPV_x00" /> 
 </Schema>
 <Data ItemCount="1">
 <Row Location="" Price_x0020_one_x0020_way="" Price_x0020_return="" LinkTitle="" Price_x0020_one_x0020_way_x002d_="" Price_x0020_return_x002d_estate="" Price_x0020_one_x0020_way_x002d_0="" Price_x0020_return_x002d_MPV="" Price_x0020_one_x0020_way_x002d_1="" Price_x0020_return_x002d_MPV_x00="" /> 
</Data>
</Root>

XSL

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" /> 
      <xsl:template match="/">
 <div id="locations">
 <ul id ="navbar" class="MSC_PrimaryNavFrame">
 <li><a href="#"><b>Going to Heathrow?<br />Find your fare fast!</b></a>
 <ul class="locations">
 <xsl:for-each select="//Data/Row">
 <li><a><xsl:attribute name ="href"><xsl:value-of  select="@Location"/>_toheathrow.aspx</xsl:attribute>
 <xsl:value-of select = "@Location" />
 </a>
 </li>
 </xsl:for-each>
 </ul>
 </li>
 </ul>
 </div></xsl:template>
 </xsl:stylesheet>

很抱歉,如果我没有正确发布代码 - 如果我留下换行符,它会删除部分内容。

2 个答案:

答案 0 :(得分:4)

至少有三种不同的方法

  1. 使用AVT(Attribute-Value Templates) - 推荐

        <li>
            <a href="{@Location}toheathrow.aspx">
                <xsl:value-of select = "@Location" />
            </a>
        </li>
    
  2. 使用标准XPath函数concat()

  3. -

    <a>
        <xsl:attribute name="href">
         <xsl:value-of select=
         "concat(@Location,'toheathrow.aspx')"/>
        </xsl:attribute>
        <xsl:value-of select = "@Location" />
    </a>
    

    0.3。 使用Xslt指令<xsl:text>

    -

    <a>
        <xsl:attribute name="href">
         <xsl:value-of select="@Location"/>
    
         <xsl:text>toheathrow.aspx</xsl:text>
        </xsl:attribute>
        <xsl:value-of select = "@Location" />
    </a>
    

    0.4。 此外,在XSLT 2.0中,可以在select指令上使用<xsl:attribute>属性

    <li>
        <a>
            <xsl:attribute name="href"
             select="concat(@Location, 'toheathrow.aspx')"/>
            <xsl:value-of select = "@Location" />
        </a>
    </li>
    

    我建议在可能的情况下始终使用AVT - 从而使代码更短,更简单,更容易理解。

答案 1 :(得分:2)

请不要在一行中发布XML文档。提供的XML(片段,因为没有根)与XSL样式表(Field空元素与某些属性不匹配,但这里肯定没有Location属性和//Data/Row路径)。

<击>

您只提供了带有xsl:for-each循环的XSL的一部分。我想你正在寻找类似的东西:

<xsl:for-each select="//Data/Row">
    <li>
        <a href="{@Location}toheathrow.aspx">
            <xsl:value-of select="@Location"/>
        </a>
    </li>
</xsl:for-each>

如果@Location属性的值本身有空格,那么您还可以使用normalize-space()函数(来自XPath 1.0)。例如:

normalize-space('  some scattered    value   ') = 'some scattered value'

修改

{concat(@Location, 'toheathrow.aspx')}更改为{@Location}toheathrow.aspx。它更紧凑。