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

2004年02月01日(日)更新


substringで文字列の一部の文字列を得る

たけち: 今回は、文字列の一部の文字列を得るためのsubstring関数について学ぼうね。

さらら: 文字列の中から文字列を取り出す、のね。

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

  • 書式: 文字列値 substring(文字列値, 開始位置を示す数値, 長さを示す数値)

さらら: 引数として指定した文字列値から、指定した開始位置から指定した長さの文字列が得られるのね。

たけち: そうそう。そんなに難しくはないよね。

さらら: そうね。


万葉集データの例

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

さらら: は〜い。

xmlデータ例 【substring.xml】

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

<manyosyu>
<volume no="1">
<poem pno="0008">
    <poet>額田王(ぬかたのおおきみ)</poet>
    <yomi>熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな</yomi>
</poem>
<poem pno="0020">
    <poet>額田王(ぬかたのおおきみ)</poet>
    <yomi>茜さす紫野行き標野行き野守は見ずや君が袖振る</yomi>
</poem>
<poem pno="0023">
    <poet>作者不明</poet>
    <yomi>打ち麻を麻続の王海人なれや伊良虞の島の玉藻刈ります</yomi>
</poem>
<poem pno="0024">
    <poet>作者不明</poet>
    <yomi>うつせみの命を惜しみ波に濡れ伊良虞の島の玉藻刈り食む</yomi>
</poem>
<poem pno="0028">
    <poet>持統天皇(じとうてんのう)</poet>
    <yomi>春過ぎて夏来たるらし白妙の衣干したり天の香具山</yomi>
    </poem>
<poem pno="0037">
    <poet>柿本人麻呂(かきのもとのひとまろ)</poet>
    <yomi>見れど飽かぬ吉野の川の常滑の絶ゆることなくまたかへり見む</yomi>
</poem>
</volume>
</manyosyu>

さらら: 作者と歌が並んでいるわね。これをどうするの?

たけち: 今回は、歌の最初の14文字を表示してみよう。

  • yomi要素の文字列の最初の14文字を表示する

さらら: あ。その「最初の14文字」を求めるのにsubstringを使うのね。

たけち: そうだね。具体的には、(コンテキストノードがpoem要素のとき)次のように書けばいいんだよ。

  • substring(yomi, 1, 14)

さらら: 文字列の最初の位置は、「1」なのね。


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

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

xslスタイルシート例 【substring.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>
   <head>
   <title>たのしいXML: XSLTスタイルシート例(substring関数)</title>
   <link rel="stylesheet" type="text/css" href="manyo.css" />
   </head>

   <body>
   <p align="center"><font color="navy">万葉集第1巻抜粋: substring関数でよみの最初の14文字を表示</font></p>

   <table border="1" width="500" align="center">
      <tr>
         <th width="15%">歌番号</th>
         <th width="60%">歌のよみ</th>
         <th>元の文字数</th>
      </tr>

   <xsl:apply-templates />

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

<xsl:template match="poem">
      <tr>
         <td><xsl:value-of select="@pno" /></td>
         <td><xsl:value-of select="substring(yomi, 1, 14)" />・・・・・</td>
         <td><xsl:value-of select="string-length(yomi)" />文字</td>
      </tr>
</xsl:template>

</xsl:stylesheet>

さらら: substring関数のところはさっき説明してくれた内容そのままね。

たけち: そうだね。簡単だよね。

さらら: そうね。実際、どうなるのか早くみてみたいわ。

たけち: じゃあ、このXSLTスタイルシートを"substring.xsl"というファイルにして、IEで表示してみようね。次のテキストをクリックしてみて。

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

substring関数でよみの最初の14文字を表示

さらら: 思ったとおりに表示されたわ。

たけち: 思ったとおりに表示できるとうれしいよね。今回はこれでおしまい。

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

→さらに文字列関数についての学習は続きます。。。 (^ ^;