我有像
这样的XML<emps>
<emp id='3432'>
<fname>Jack</fname>
<lname>Dawson</lname>
<emp>
<emp id='1122'>
<fname>Jack</fname>
<lname>Thompson</lname>
<emp>
<emps>
我正在开发一个Web应用程序,它根据输入的第一个名称搜索此xml并提供结果页面。为了达到这个目的,我编写了一个xslt,根据输入的搜索字符串将XML转换为HTML,该字符串作为名为srchStr的变量传递。
<xsl:template match="employees">
<xsl:for-each select="emp[fname=$srchStr]">
<tr>
<xsl:variable name="id">
<xsl:value-of select="@id" />
</xsl:variable>
<td>
<a href='detailSearch.do?id={$id}'>
<xsl:value-of select="fname" />
,
<xsl:value-of select="lname" />
</a>
</td>
</tr>
</xsl:for-each
</xsl:template>
但是用户可以输入大写或小写的名称。那么如何将xml标签fname中的第一个名称转换为小写并进行比较呢?
有些人可以在我的xsl中使用代码段来使用fn:lower-case
。
答案 0 :(得分:10)
要将字符串转换为小写或大写,您可以使用XPath 1.0函数translate
:
首先为小写和大写字母定义字母。请注意,每对字符的位置必须相同:
<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
然后你可以转换为大写:
<xsl:value-of select="translate($toconvert,$lcletters,$ucletters)"/>
或小写
<xsl:value-of select="translate($toconvert,$ucletters,$lcletters)"/>
答案 1 :(得分:4)
emp[lower-case(fname)=lower-case($srchStr)]
或者,如果您只有XPath 1.0,您可以尝试使用这里的翻译: http://geekswithblogs.net/TimH/archive/2006/07/06/84229.aspx
请注意,translate
的示例不适用于带重音符号的名称(例如我的):