如何摆脱破坏链接的“位置”元素后添加的空间? 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>
很抱歉,如果我没有正确发布代码 - 如果我留下换行符,它会删除部分内容。
答案 0 :(得分:4)
至少有三种不同的方法:
使用AVT(Attribute-Value Templates) - 推荐
<li>
<a href="{@Location}toheathrow.aspx">
<xsl:value-of select = "@Location" />
</a>
</li>
使用标准XPath函数concat()
:
-
<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
。它更紧凑。