Преобразование в нижний регистр в XSL - PullRequest
5 голосов
/ 16 июня 2010

У меня есть XML как

<emps>
<emp id='3432'>
 <fname>Jack</fname>
 <lname>Dawson</lname>
<emp>
<emp id='1122'>
 <fname>Jack</fname>
 <lname>Thompson</lname>
<emp>
<emps>

Я занимаюсь разработкой веб-приложения, которое выполняет поиск в этом 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 в нижний регистр и выполнить сравнение?

Может кто-нибудь поместить фрагмент кода для использования fn:lower-case внутри моего xsl.

Ответы [ 2 ]

10 голосов
/ 16 июня 2010

Чтобы преобразовать строку в нижний или верхний регистр, вы можете использовать функцию 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)"/>
4 голосов
/ 16 июня 2010

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

Или, если у вас только XPath 1.0, вы можете попробовать использовать перевод как здесь: http://geekswithblogs.net/TimH/archive/2006/07/06/84229.aspx

Имейте в виду, однако, что пример с translate не будет работать на именах с ударением (как у меня:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...