5

我有一个类似的 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 来根据作为名为 srchStr 的变量传递的输入搜索字符串将 XML 转换为 HTML。

<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 中的名字转换为小写并进行比较呢?

有人可以fn:lower-case在我的 xsl 中放置一个代码片段吗?

4

2 回答 2

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)"/>
于 2010-06-16T13:56:58.573 回答
4

emp[lower-case(fname)=lower-case($srchStr)]

或者,如果您只有 XPath 1.0,您可以尝试使用如下所示的翻译:http: //geekswithblogs.net/TimH/archive/2006/07/06/84229.aspx

但是请注意,带有重音符号的示例translate不适用于带有重音符号的名称(例如我的 :)

于 2010-06-16T13:57:22.033 回答