XPathとXSLTの関数 【文字列関数】 translate

2004年01月25日(日)更新


translateで文字を変換する

たけち: 今回は、ある文字を別の文字に変換するためのtranslate関数について学ぼうね。

さらら: はい。translateって、「変換する」ってそのものを表している名前ね。

たけち: そうだね。じゃ、まず、translate関数は、どう書くのかをつぎに載せておくね。

  • 書式: 文字列値 translate("変換対象の文字列", "置換される文字リスト", "置換する文字リスト")

さらら: えっ? "変換対象の文字列"はわかるけど、"置換される文字リスト"と"置換する文字リスト"ってなぁに?

たけち: "置換される文字リスト"と"置換する文字リスト"は、どちらも一文字以上の文字の並びなんだ。そして、文字の変換は、"置換される文字リスト"にある文字が"変換対象の文字列"の中にあったときに、"置換する文字リスト"にある文字に変換されるんだ。

さらら: う〜ん。よくわかんない。(^ ^;

たけち: じっ、じゃあ、次の図で確認して。

translate関数の働き


歴史的仮名づかいを含む万葉集データの例

さらら: あっ、そういうことなんだ。わかった気がする。(^ ^;

たけち: じゃ、さっそく今回のサンプルを見てみようね。まずは、万葉集のXMLデータ例を次に載せるね。いつもとちょっと違うからね。

さらら: はい。

xmlデータ例 【translate.xml】

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="translate.xsl"?>

<manyosyu>

<poem pno="0021">
   <poet>大海人皇子(おおあまのみこ)</poet>
   <yomi>紫の にほへる妹(いも)を 憎くあらば 人妻ゆゑに 我れ恋ひめやも</yomi>
   <image>m0021.jpg</image>
</poem>

<poem pno="0042">
   <poet>額田王(ぬかたのおおきみ)</poet>
   <yomi>潮騒(しほさゐ)に 伊良虞(いらご)の島辺 漕ぐ舟に 妹乗るらむか 荒き島廻(しまみ)を</yomi>
   <image>m0042.jpg</image>
</poem>
<poem pno="0111">
   <poet>弓削皇子(ゆげのみこ)</poet>
   <yomi>いにしへに 恋ふる鳥かも 弓絃葉(ゆづるは)の 御井(みゐ)の上より 鳴き渡り行く</yomi>
   <image>m0111.jpg</image>
</poem>

</manyosyu>

さらら: 歴史的仮名づかいって、「」とか「」ね。あっ、そっか。今回はこの文字を「い」と「え」に変換しようってわけなのね。

たけち: あっ、先に言われちゃったけど、そうなんだ。今回は次のようなスタイルシートを作ろうとしていんるだ。

  • に変換する
  • に変換する

さらら: で、その変換にtranslate関数を使うのね。

たけち: そうだね。じゃあ、XSLTスタイルシートの内容を見てみよう。

さらら: えぇ。


translateを使ったXSLTスタイルシートの例

たけち: じゃ、さっそく今回のXSLTスタイルシートのサンプルを見てみようね。【string-length.xsl】を次に載せるね。

xslスタイルシート例 【translate.xsl】

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="/">
   <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
   <title>たのしいXML: XSL基本サンプル-文字列関数(11) translate</title>
   <link rel="stylesheet" type="text/css" href="manyo.css" />
   </head>

   <body>
   <p align="center">万葉集第1巻抜粋: 歴史的かなづかいを変換しています</p>

   <xsl:apply-templates />

   </body>
   </html>
</xsl:template>

<xsl:template match="poem">
<table border="0" width="500" align="center">
   <tr>
      <th>歌番号: <xsl:value-of select="@pno" /></th>
      <th><xsl:value-of select="poet" /></th>
   </tr>
   <tr>
      <td><xsl:value-of select="translate(yomi, 'ゐゑ', 'いえ')" /></td>
   <td>
      <img><xsl:attribute name="src">image/<xsl:value-of select="image" /></xsl:attribute></img>
   </td>
   </tr>
</table>
</xsl:template>

</xsl:stylesheet>

さらら: translate(yomi, 'ゐゑ', 'いえ')というところで変換しているのね。

たけち: そうだね。yomi要素の内容(文字列)のに、そしてに変換しているんだね。

さらら: そうね。

たけち: じゃあ、このXSLTスタイルシートを"translate.xsl"というファイルにして、実際にどうなるか見てみようね。次のテキストをクリックしてみて。

万葉集第1巻抜粋のXMLファイル translate.xml(上記説明のXML/XSL適用)

translate関数で歴史的かなづかいを変換する

さらら: が現代かなづかいに変換されて歌が表示されたわ。

たけち: じゃぁ、今回はこれでおしまい。

さらら: は〜い。ありがと。

→文字列関数についての学習はこれで終わりです。。。 (^ ^;