5

私は次のようなXMLを持っています

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

入力した名に基づいてこのxmlを検索し、結果のページを表示するWebアプリケーションを開発しています。これを実現するために、srchStrという名前の変数として渡される入力検索文字列に基づいてXMLをHTMLに変換するxsltを作成しました。

<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 に答える